home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / basic / orionircsrc.lha / OrionIRC.asc < prev    next >
Text File  |  1999-01-24  |  70KB  |  3,073 lines

  1.  
  2. ;
  3. ; Get editors working! ! ! !
  4. ;
  5. ; Current bugs:
  6. ;
  7. ; 1. fix input text routine for non server messages for proper cut
  8. ; and display and usage formats..
  9. ;
  10. ; 2. display data loading sequence bug +1 to display ID with gfx card?!
  11. ;
  12. ; 3. spontaneous relogin or drop after a period of time
  13. ;
  14. ; add private convo
  15. ; use IP for security
  16. ; add opping from X
  17. ; user-history
  18. ; given access to levels
  19. ; channel monitor and notify
  20. ; add more basic funtions .. i.e. and whois
  21. ; ^^ will come with better aliasing..
  22. ;
  23. ;
  24. ; ____ __ _   __ __     __ _      __ _ _
  25. ; / /_////=   / /_/  /< /_/_ /<  /-/_>_>
  26. ;
  27. ;----------------------------------------------
  28. .top
  29.  
  30. ; */ System Basics! /*
  31.  
  32. ;NoCli
  33. WBStartup
  34.  
  35. CaseSense Off
  36. DateFormat 1
  37. WBenchToFront_
  38. WbToScreen 0
  39.  
  40. ; /* set up certain variables and constants to be made
  41. ; configurable in base release /*
  42.  
  43.  
  44. ; /* loging verboseness for input & output /*
  45. outp=True
  46. inp=True
  47.  
  48. ; /* other variables for needed base at startup /*
  49.  
  50. color=True
  51. bot=False
  52. intro=False
  53. speech=False
  54.  
  55. ; /* non-configurable startup variables /*
  56.  
  57. reg=True
  58. test=True
  59. connected=False
  60. nicksetup=False
  61. new=True
  62.  
  63.  
  64. ; /* system constants /*
  65.  
  66. #_l=9
  67. #_v=2000
  68. #_err=133
  69. #_id=0
  70. #_width=1
  71. #_height=2
  72. #_depth=4
  73. #_overscan=8
  74. #_scroll=16
  75. #TCPBuflen=$8192            ;Maximum data size to read at any time
  76. #FIONREAD=$4004667f         ;FIONREAD request
  77. #_Pens=$8000003A
  78. #WINFLAGS=#WFLG_CLOSEGADGET|#WFLG_ACTIVATE|#WFLG_DRAGBAR|#WFLG_DEPTHGADGET
  79. #WINFLAGS=#WINFLAGS | #WFLG_RMBTRAP
  80. #WINWIDTH=640
  81. #MOUSEMOVE=$10
  82. #INTUITICKS=$400000
  83.  
  84. ; /* intuition setup for listviews /*
  85.  
  86. AddIDCMP #MOUSEMOVE+#INTUITICKS
  87.  
  88. ; /* data type definitions /*
  89.  
  90. DEFTYPE.w random,ttl,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
  91.  
  92. DEFTYPE.l DisID
  93.  
  94. NEWTYPE.listview
  95.   pad.w
  96.   string.s
  97. End NEWTYPE
  98. NEWTYPE.list
  99.   *ItemA.b
  100.   *ItemB.b
  101. End NEWTYPE
  102. NEWTYPE.irc
  103.   amber.w
  104.   b$
  105. End NEWTYPE
  106. NEWTYPE.servers
  107.   voice.w
  108.   s$
  109. End NEWTYPE
  110.  
  111. NEWTYPE.textEX                 ;for the word-wrapping stuff
  112.   txwidth.w                    ;this is used as a workspace
  113.   txheight.w                   ;by the Textfit_ command
  114.   txMinx.w
  115.   txMiny.w
  116.   txMaxx.w
  117.   txMaxy.w
  118. End NEWTYPE
  119. NEWTYPE.SMode                              ;for the mode requester
  120.   DisplayID.l
  121.   DisplayWidth.l
  122.   DisplayHeight.l
  123.   DisplayDepth.w
  124.   OverscanType.w
  125. End NEWTYPE
  126.  
  127. ;/* internet socket setup /*
  128. NEWTYPE.inaddr
  129.   s_addr.l
  130. End NEWTYPE
  131. NEWTYPE.sockaddrin
  132.   sin_len.b
  133.   sin_family.b
  134.   sin_port.w
  135.   sin_addr.inaddr
  136.   sin_zero.b[8]
  137. End NEWTYPE
  138. NEWTYPE.hostent
  139.   *h_name.b
  140.   *h_aliases.list
  141.   h_addrtype.l
  142.   h_lenght.l
  143.   *h_addr_list.list
  144. End NEWTYPE
  145.  
  146. ; /* system integers using subtypes /*
  147.  
  148. al.textEX\txwidth=0,0,0,0,0,0  ;for the word-wrap routine
  149.  
  150. ; /* system integers (inititalized after types are defined
  151. ; to insure data integrity) /*
  152.  
  153. cnt=0
  154. set.l=0
  155. ok.b=0
  156. p=0
  157. opie=0
  158. maxlines=9999                  ;must be > maximum lines of text expected
  159. fsize.b=11
  160. prt=1
  161.  
  162. ; /* Array setup for lists /*
  163.  
  164. Dim List convo.irc(9000)
  165. Dim List nicks.irc(100)
  166. Dim List chans.irc(20)
  167. Dim List comms.irc(50)
  168. Dim List groups.servers(30)
  169. Dim List conchan.servers(10)
  170. Dim List gset.servers(20)
  171.  
  172. ; /* Array setup for standard variables /*
  173.  
  174. Dim nick$(#_l)
  175. Dim ip$(#_l)
  176. Dim pass$(#_l)
  177. Dim access$(#_l)
  178. Dim acc.l(#_l)
  179. Dim oneline$(#_v)
  180. Dim greets$(100)
  181. Dim command$(50)
  182. Dim pass.l(#_l)
  183. Dim win.l(#_l)
  184. Dim input$(50)
  185. Dim incfg$(1000)
  186. Dim nickset$(20)
  187. Dim errn$(#_err)
  188. Dim errt$(#_err)
  189. Dim errd(#_err)
  190. Dim boing$(2000)
  191. Dim group$(20)
  192. Dim server$(20)
  193. Dim port(2)
  194. Dim servers$(20)
  195. Dim conchan$(10)
  196. Dim ssort$(20)
  197. Dim chans$(50)
  198. Dim pens.w(10)
  199. Dim irccol$(31)
  200. Dim vernfo$(10)
  201.  
  202. For n=0 To 10
  203.  pens(n)=$FFFF
  204. Next n
  205. *p.w=&pens(0)
  206.  
  207. ; /* direct variable definitions which will either be
  208. ; editable via config or a data sequence.. whatever.. /*
  209.  
  210. port(0)=6666
  211. port(1)=6667
  212. port(2)=6668
  213.  
  214. TCPmem.l=AllocMem(#TCPBuflen,0) ;Allocate the temp buffer used for all TCP reads
  215.  
  216. VER$="OrionIRC V1.0 ._. OrionSoft"
  217. ver$="OrionIRC V0.08 - Alpha ._. By Andrew Drays - OrionSoft LTD."
  218. Ver$="OrionBOT SE V1.5"
  219.  
  220. vernfo$(0)="By: Andrew Drays"
  221. vernfo$(1)="Special Thanx to Paul Burkey & Curt Esser!"
  222. vernfo$(3)="=========================================="
  223.  
  224. ; /* here's where I have sequences BEFORE the actual program
  225. ; setup to setup other data for the IRC client when it's running
  226. ; right now, just eliza but l8er ad&D stuff! /*
  227.  
  228. ;------------------------------------------
  229. ;
  230. ; eliza data setup routine
  231. ;
  232. ;-----------------------------------------
  233. Dim S.l(36),R.l(36),N.l(36)
  234. NA=36
  235. NB=12
  236. NC=112
  237. For X=1 To NA+NB+NC
  238.   Read Z$
  239. Next X
  240. L.l=0
  241. For X=1 To NA
  242.   Read S(X),L
  243.   R(X)=S(X)
  244.   N(X)=S(X)+L-1
  245. Next X
  246.  
  247. ;/* All inits are completed.. ready for macros.. /*
  248. ;
  249. ;------------------------------------------
  250. ;
  251. ; Macros
  252. ;
  253. ;--------------------------------------------
  254.  
  255. ; /* none now.. /*
  256.  
  257. ;-----------------------------------------
  258. ;
  259. ; Internet TCPfuncs Function Subroutines! *** DO NOT TOUCH! **
  260. ;
  261. ; /* this is not my code, I can get it back, but it is very
  262. ; difficult to put back in , I have made slight modifications
  263. ; for speed optimization and for this program this the actual
  264. ; TCP port.. I'm not 100% sure of it's limitations /*
  265. ;
  266. ;-----------------------------------------
  267.  
  268.  
  269. Function .s ReadTCP{}
  270.   SHARED sock.l,TCPmem.l
  271.   ;
  272.   ; This Function reads data from the server the result is passed back in a
  273.   ; string. If there is no messages then it will return an empty string =""
  274.   ;
  275.   sockread.l=0                                ;Clear Readmask
  276.   sockread.l BitSet sock.l                    ;Set Readmask on our socket
  277.   e.l=IoctlSocket_(sock.l,#FIONREAD,TCPmem.l) ;How much data is there?
  278.   f.l=Peek.l(TCPmem.l)                        ;Place value in f
  279.   If f>0
  280.     If f>#TCPBuflen Then f=#TCPBuflen         ;Don't read more than #TCPBuflen
  281.     c=recv_(sock.l,TCPmem.l,f,0)              ;Read all Data
  282.     c$=String$(" ",f)                         ;Reserve String
  283.     CopyMem_ TCPmem.l,&c$,f                   ;Copy Data to string
  284.     Function Return c$
  285.   Else
  286.     Function Return ""
  287.   EndIf
  288. End Function
  289.  
  290. ;----
  291. ;WARNING: This is a 'rough' experiment function.
  292. ;Function will probably change next update.
  293. ;----
  294.  
  295. Function .l ReadMemTCP{ReadAdd.l,MaxSize.l}
  296.   SHARED sock.l,TCPmem.l
  297.   ;
  298.   ; Read into memory location 'ReadAdd.l' up to a maximum of 'MaxSize.l'
  299.   ; Used for reading long binary files eg, WWW files or FTP files.
  300.   ; Also returns the amount of bytes actually read.
  301.   ;
  302.   sockread.l=0                                ;Clear Readmask
  303.   sockread.l BitSet sock.l                    ;Set Readmask on our socket
  304.   e.l=IoctlSocket_(sock.l,#FIONREAD,TCPmem.l) ;How much data is there?
  305.   f.l=Peek.l(TCPmem.l)                        ;Place value in f
  306.   If f>0
  307.     If f>#TCPBuflen Then f=#TCPBuflen         ;Don't read more than #TCPBuflen
  308.     If f>MaxSize Then f=MaxSize               ;Don't read more than MaxSize
  309.     c=recv_(sock.l,ReadAdd.l,f,0)             ;Read Data to ReadAdd location
  310.     Function Return f
  311.   Else
  312.     Function Return 0
  313.   EndIf
  314.   ;
  315. End Function
  316.  
  317. Statement WriteMemTCP{ad.l,size.w}
  318.   SHARED sock.l
  319.   ;
  320.   ; This routine writes data via TCP.
  321.   ;
  322.   sockwrite.l=0                           ;Clear Writemask
  323.   sockwrite.l BitSet sock.l               ;set Writemask on our socket
  324.   g.l=WaitSelect_(2,0,&sockwrite.l,0,0,0) ;Wait until server is ready to read our data
  325.   c.l=send_(sock.l,ad,size,0)             ;Send data to server
  326. End Statement
  327.  
  328. Function .b ConnectTCP{host$,port.w}
  329.   SHARED sock.l
  330.   ;
  331.   ; Check if Miami/AmiTCP stack is available
  332.   ; Connect to host at specified port
  333.   ; Return true or False if Connection is made
  334.  
  335.   SocketBase.l=OpenLibrary_("bsdsocket.library",0)
  336.   If SocketBase=0
  337.     Function Return False
  338.   Else
  339.     CloseLibrary_(SocketBase)
  340.     sock.l=socket_(2,1,0)
  341.     *a.hostent=gethostbyname_(host$)
  342.     If *a=0
  343.       Function Return False   ; host not found (or internal TCP error)
  344.     Else
  345.       ;
  346.       ; Copy Details to our Sockaddrin structure
  347.       ;
  348.       CopyMem_ *a\h_addr_list\ItemA,&host.sockaddrin\sin_addr,*a\h_lenght
  349.       host.sockaddrin\sin_port=port       ;Set port number
  350.       host.sockaddrin\sin_family=2        ;Set type to AT_INET
  351.       StructLength.l=SizeOf .sockaddrin   ;Get lenght of structure sockaddrin
  352.       If connect_(sock.l,host.sockaddrin,StructLength)=-1
  353.         CloseSocket_(sock.l)
  354.         Function Return False
  355.       Else
  356.         Function Return True
  357.       EndIf
  358.     EndIf
  359.   EndIf
  360. End Function
  361.  
  362. Statement PrintTCP{text$}
  363.   ;
  364.   ; Send String via TCP
  365.   ;
  366.   WriteMemTCP{&text$,Len(text$)}
  367. End Statement
  368.  
  369. Statement NPrintTCP{text$}
  370.   ;
  371.   ; Send String via TCP + Carrage Return
  372.   ;
  373.   text$=text$+Chr$(13)
  374.   WriteMemTCP{&text$,Len(text$)}
  375. End Statement
  376.  
  377. Statement NLPrintTCP{text$}
  378.   ;
  379.   ; Send String via TCP + Carrage Return + Line Feed
  380.   ;
  381.   text$=text$+Chr$(13)+Chr$(10)
  382.   WriteMemTCP{&text$,Len(text$)}
  383. End Statement
  384.  
  385. Statement CloseTCP{}
  386.   SHARED sock.l
  387.   ;
  388.   ; This is a simple close socket command
  389.   ; Provided for the shear hell of it :)
  390.   ;
  391.   CloseSocket_(sock.l)
  392. End Statement
  393.  
  394. ; /* end tcpfuncs subroutine processes /*
  395. ;
  396. ;
  397. ; /* 3d render routine /*
  398.  
  399. Statement  large{d$,x,y,af,p,j}
  400.   SHARED ln,vn
  401.   xx=x:yy=y
  402.   For r=1 To Len(d$)
  403.   WLocate 24,24:NPrint Mid$(d$,r,1)
  404.   sx=xx:sy=y
  405.    For d=1 To p
  406.     If d<p
  407.       cl=2
  408.     Else
  409.       cl=3
  410.     EndIf
  411.    xx=sx:yy=sy-(d*2)
  412.     For o=0 To 7
  413.       For s=0 To 7
  414.         If Point(24+s,32+o)=1
  415.           dx=(xx+(s*af))
  416.           dy=(yy+(o*af))
  417.           fx=dx+(af-1):fy=dy+(af-1)
  418.           Boxf dx,dy,fx,fy,cl
  419.         EndIf
  420.       Next s
  421.       xx=xx-ln
  422.     Next o
  423.   Next d
  424.   xx=xx+j:ln=ln-vn
  425. Next r
  426. End Statement
  427.  
  428. ; /* Telnet Code, For future Use.. Cut out AND set aside!! /*
  429.  
  430. Function .s input{prompt$}
  431.   ;
  432.   ; Simple "old style" input function
  433.   ; This function is not linked to TCP coding
  434.   ;
  435.  Print prompt$+": "
  436.   text$=Edit$(40)
  437.   Function Return text$
  438. End Function
  439.  
  440. Function .s striptext{text$}
  441.   ;
  442.   ; Simple function to strip Carrage Returns
  443.   ; and Line Feeds from text.
  444.   ;
  445.   c$=""
  446.   For a=1 To Len(text$)
  447.     l$=Mid$(text$,a,1)
  448.     If l$<>Chr$(10) AND l$<>Chr$(13)
  449.       c$=c$+l$
  450.     EndIf
  451.   Next a
  452.   Function Return c$
  453. End Function
  454.  
  455. ; /* end telnet code /*
  456.  
  457. ; /* IRC tcp routines - definitions inside /*
  458.  
  459. Statement logtext{text$}
  460.   ;
  461.   ; log all text from server and out to..
  462.   ;
  463.   SHARED input$,output$,inp,outp,ltxt
  464.   If ltxt=True
  465.     FileOutput 2
  466.     NPrint text$
  467. ;    If inp=True
  468. ;      NPrint input$
  469. ;    EndIf
  470. ;    If outp=True
  471. ;      NPrint output$
  472. ;    EndIf
  473.     DefaultOutput
  474.   EndIf
  475. End Statement
  476.  
  477. Statement output{a$}
  478.    ;
  479.    ; Send raw text to server
  480.    ;
  481.    NPrintTCP{a$}
  482.    logtext{"<me>"+a$}
  483. End Statement
  484.  
  485. Statement say{a$}
  486.    ;
  487.    ; Send text direct to channel
  488.    ;
  489.    SHARED chan$,target$
  490.    say$="privmsg "+chan$+" :"+a$
  491.    NPrintTCP{say$}
  492.    logtext{"<me>"+say$}
  493. End Statement
  494.  
  495. Statement nstr{A$}
  496.    ;
  497.    ; add a cr and linefeed to string
  498.    ; telnet?!? testing
  499.    ;
  500.    send$=input{nick$}             ; Get user input
  501.    If send$<>""
  502.      send$=send$+Chr$(13)+Chr$(10) ; add CR+LF
  503.      say{send$}   ;  send text to server
  504.    EndIf
  505. End Statement
  506.  
  507. Statement lost{lst$}
  508.     SHARED nick$()
  509.     ;
  510.     ; old routine for bot only if it dropped from all
  511.     ; channels, not needed anymore, keep for future use
  512.     ;
  513.     For i=1 To 6
  514.       output{"privmsg "+nick$(0)+" : Help! I'm lost!!"}
  515.       say{"help!"}
  516.       Delay_(5)
  517.     Next i
  518. End Statement
  519.  
  520. Statement join{chan$}
  521.     ;
  522.     ; join channel and send greeting only in orion length
  523.     ;
  524.      SHARED greet$,z,greets$(),target$
  525.      output{"JOIN "+chan$}
  526.      If cgreet=True
  527.        r.l=Rnd(z)
  528. ;       say{" ____ __ _   __ _       __ _       __ _ _"}
  529. ;       say{" / /_////=   / /_\   /< /_/_ /<   /-/_>_>"}
  530.        say{greets$(r)}
  531.        GTSetString 1,3,chan$
  532.        set=0
  533.      EndIf
  534. End Statement
  535.  
  536. Statement commands{who$}
  537.   ;
  538.   ; bot commands display privmsg to user
  539.   ;
  540.   SHARED who$,chan$,b,command$(),head$,target$
  541.   ; make access level counter for amenu display for-next
  542.   For i=0 To b
  543.     say$="PRIVMSG "+who$+" : "+command$(i)
  544.     NPrintTCP{say$}
  545.   Next i
  546.       say$="PRIVMSG "+who$+" : Current Comand Prefix is '"+head$+"'"
  547.     NPrintTCP{say$}
  548.  
  549. End Statement
  550.  
  551. Statement random{a$}
  552.  ;
  553.  ; random crap output ** make compatible with kuang! **
  554.  ;
  555.  SHARED set,pass,h,oneline$(),chan$,target$
  556.  set=0
  557.  pass=Rnd(h)
  558.  say{oneline$(pass)}
  559. End Statement
  560.  
  561. Statement kick{a$}
  562.   ;
  563.   ; duh!
  564.   ;
  565.   SHARED who$
  566.   SHARED said$
  567.   SHARED chan$,target$
  568.   kick$="kick "+target$+" "+a$
  569.   output{kick$}
  570. End Statement
  571.  
  572. ;--------------------------------------------------
  573. ;
  574. ; Encryption routines
  575. ;
  576. ;--------------------------------------------------
  577.  
  578. Statement ncrypt{a$}
  579.   ;
  580.   ; Encryption algorythm is supposed to shift up ascii codes in a friendly way.
  581.   ;
  582.  
  583.   SHARED chan$,who$,said$,CODEDO$,nick$(),target$
  584.  
  585.   INSTRG$=UnRight$(said$,8)
  586.  
  587.   D1.l = Rnd(9)
  588.   D2.l = Rnd(9)
  589.   D3.l = D2 * D1
  590.   DA$ = Str$(D1)
  591.   DB$ = Str$(D2)
  592.  
  593.   If Len(INSTRG$) > 2
  594.  
  595.     UNAME$ = INSTRG$
  596.     LENGTHONE = Len(UNAME$)
  597.     TEMPCOUNT = 1
  598.     NEWSTR$=""
  599.     For X = 1 To LENGTHONE
  600.        CHARA$ = Mid$(UNAME$, X, 1)
  601.        CHARVAL = Asc(CHARA$)
  602.        If CHARVAL > 31 AND CHARVAL < 127
  603.           CHAR2 = CHARVAL + 1 + D3
  604.           If CHAR2 >= 127
  605.              CHAR2 = CHAR2 - 95
  606.           EndIf
  607.           CHAR2$ = Chr$(CHAR2)
  608.        Else
  609.           CHAR2 = CHARVAL
  610.           CHAR2$ = Chr$(CHAR2)
  611.        EndIf
  612.        NEWSTR$ = NEWSTR$ + CHAR2$
  613.     Next X
  614.     v$ = "PRIVMSG " + chan$ +" :"+ "-\\" + "<" + DA$ + DB$ + ">" + NEWSTR$
  615.     DA$ = "": DB$ = ""
  616.   Else
  617.     v$="PRIVMSG "+nick$(0)+" : Nothing to Encrypt!"
  618.   EndIf
  619.   NPrintTCP{v$}
  620.   logtext{"<me>"+v$}
  621. End Statement
  622.  
  623. Statement dcrypt{a$}
  624.    SHARED color,who$,chan$,nick$()
  625.    WColour color
  626.    Cof$ = Left$(a$,4)
  627.    a$ = UnRight$(a$,4)
  628.    D4$ = Mid$(Cof$, 2, 1)
  629.    D5$ = Mid$(Cof$, 3, 1)
  630.    D4.l = Val(D4$)
  631.    D5.l = Val(D5$)
  632.    D6.l = D4 * D5
  633.    G.l = Len(a$)
  634.    For X=1 To G
  635.       Chara$ = Mid$(a$, X, 1)
  636.       Charval.l = Asc(Chara$)
  637.       If Charval > 31 AND Charval < 127
  638.          Char2.l = Charval - D6 - 1
  639.          If Char2 < 32
  640.             Char2 = Char2 + 95
  641.          EndIf
  642.          Char2$ = Chr$(Char2)
  643.       Else
  644.          Char2 = Charval
  645.          Char2$ = Chr$(Char2)
  646.       EndIf
  647.       If X=1
  648.         NS$=Char2$
  649.       Else
  650.         NS$=NS$+Char2$
  651.       EndIf
  652.    Next X
  653.    x$ = "PRIVMSG "+nick$(0)+" : Decoded-> "+who$+": "+NS$
  654.    NPrintTCP{x$}
  655.    logtext{"<me>"+x$}
  656.    WColour color
  657. End Statement
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. .begin
  665. ;
  666. ; /*
  667. ; Actual Program Begins here!
  668. ;
  669. ;
  670.  
  671. ;log
  672.  
  673. Gosub baseload     ; data loading sequences
  674. Gosub extendload
  675. Gosub newsort      ; data loaded SORTING
  676. If test=True
  677.   enter$=Edit$(30)
  678.   End
  679. EndIf
  680. Gosub menu         ; pull down menus setup
  681. Gosub screengo
  682. Gosub gtlistsel    ; Gt lists
  683. Gosub gtlistirc
  684. Gosub gtlistsed
  685. Gosub selwindow    ; open server select window and wait for
  686.                    ; user input
  687.  
  688. ;*********************
  689. ; Gui
  690. ;*********************
  691.  
  692.  
  693. .main
  694. Repeat
  695. If test=False
  696.   ; *** check to see if IRC is up, and if it is, don't WAIT
  697.   If irc=True
  698.     Delay_(1)
  699.     ev.l=Event
  700.   Else
  701.     ; *** if irc isn't up, WAIT for an inputevent!
  702.     ev.l=WaitEvent
  703.   EndIf
  704. Else
  705.   ; ** Same for test variable no reason to eat cpu time
  706.   ; when there's no IRC input to look for
  707.   ev.l=WaitEvent
  708. EndIf
  709.   ; Grab GUI event integers
  710.   evw.l=EventWindow
  711.   evc.l=EventCode
  712.   evq.l=EventQualifier
  713.   ; if a window EXISTS then do the routine to check for input,
  714.   ; no reason to check for input if the window isn't there.. :)
  715.   ; thus making the program SMART!
  716. If win(0)=True
  717.   ; all windows follow (or SHOULD follow the same routine priority
  718.   ; 1. Gadget
  719.   ; 2. pulldown menu
  720.   If evw=0
  721.     Use Window evw
  722.     If ev=$40
  723.       Select GadgetHit
  724.         Case 1
  725.          If V=nickstot-1
  726.           V=0
  727.          Else
  728.           V+1
  729.          EndIf
  730.         Case 2
  731.           slst.l=evc
  732.           Dim List groups.servers(30)
  733.           serverst$=servers$(slst)
  734.           Gosub serverlist
  735.           GTChangeList 0,6,groups()
  736.         Case 3
  737.           If prt=2
  738.             prt=0
  739.           Else
  740.             prt+1
  741.           EndIf
  742.         Case 7
  743.           Gosub irc
  744.         Case 8
  745.           Free Window 0
  746.           win(0)=False
  747.           Gosub sedwindow
  748.         Case 6
  749.           cserver$=server$(evc)
  750.           GTSetString 0,18,cserver$
  751.         Case 16
  752.           chans$=chans$(evc)
  753.           Gosub chansort
  754.       End Select
  755.     EndIf
  756.     If ev=$100
  757.       If MenuHit=0
  758.         Select ItemHit
  759.           Case 0
  760.             Gosub aboutpgm
  761.           Case 1
  762.             cmd$=""
  763.             Gosub docmd
  764.           Case 2
  765.             Gosub irc
  766.           Case 3
  767.             Goto quit
  768.         End Select
  769.       EndIf
  770.       If MenuHit=1
  771.         Select ItemHit
  772.           Case 0
  773.             Select SubHit
  774.               Case 0
  775.                Gosub diskload
  776. ;               Gosub refresh
  777.               Case 1
  778.                Gosub disksave
  779.               Case 2
  780.                ok=False
  781.                Display=0
  782.                Free Window 0
  783.                Free Screen 0
  784.                Gosub screengo
  785.                Gosub selwindow
  786.             End Select
  787.         End Select
  788.       EndIf
  789.     EndIf
  790.     If ev=$200
  791.       Free Window evw
  792.       win(evw)=False
  793.     EndIf
  794.   EndIf
  795. EndIf
  796.  
  797.  
  798. ; IRC check and connect routine.. very simple..
  799. ;
  800. ; if the nickname is setup and we're logged in, then
  801. ; grab input.. otherwise.. let's get the nick setup..
  802. ;
  803. ;
  804. ;
  805. .ircmain
  806.  
  807. If irc=True
  808.  
  809.  If test=False
  810.   If nicksetup=False
  811.     If g=0
  812.       output{"PASS "+nickset$(V)}                       ; send dummy password to server
  813.     EndIf
  814.     If g=1
  815.       nick$=nickset$(V)
  816.       Gosub nick
  817.     EndIf
  818.     If g=2
  819.       output{"USER "+username$+" "+cserver$+" X :"+boing$}  ; send dummy user info to server
  820.     EndIf
  821.     g+1
  822.     If g=4
  823.       connected=True
  824.       nicksetup=True
  825.     EndIf
  826.   EndIf
  827.     Gosub sinput
  828.  EndIf
  829. EndIf
  830.  
  831. ;
  832. ; IRC window intuition routine : not sure if the program
  833. ; does even checking if it's open or not.. gotta see, may be
  834. ;  a severe cpu timewaster
  835. ;
  836. ;
  837. .ircintu
  838.   If evw=1
  839.     Use Window evw
  840.     If ev=$40
  841.       Select GadgetHit
  842.         Case 2
  843.           ircout$=(GTGetString(1,2))
  844.           If Left$(ircout$,1)="/"
  845.             Gosub alias
  846.           Else
  847.           If test=False
  848.             say{ircout$}
  849.             If privmsg=True
  850.               chan$=oldchan$
  851.               privmsg=False
  852.             EndIf
  853.           EndIf
  854.             output$=chan$+"-> "+ircout$
  855.             Gosub convdis
  856.           EndIf
  857.           GTSetString 1,2,""
  858.           ActivateString 1,2
  859.         Case 7
  860.           GTToggle 1,7
  861.         Case 8
  862.           GTToggle 1,8
  863.         Case 9
  864.           GTToggle 1,9
  865.         Case 10
  866.           GTToggle 1,10
  867.         Case 11
  868.           GTToggle 1,11
  869.         Case 12
  870.           GTToggle 1,12
  871.         Case 14
  872.           If FirstItem(convo())
  873.              For i=0 To evc-1
  874.                NextItem convo()
  875.              Next i
  876.              cut$=convo()\b
  877.           EndIf
  878.           GTSetString 1,2,cut$
  879.         Case 17
  880.           If FirstItem(conchan())
  881.            For i=0 To evc
  882.              chan$=conchan()\s
  883.              NextItem conchan()
  884.            Next i
  885.           EndIf
  886.           GTSetString 1,5,chan$
  887.           ActivateString 1,2
  888.       End Select
  889.     EndIf
  890.     If ev=$100
  891.       If MenuHit=0
  892.         Select ItemHit
  893.           Case 0:Gosub about
  894.           Case 1:Goto quit
  895.           Case 2:Goto quit
  896.         End Select
  897.       EndIf
  898.       If MenuHit=1
  899.       EndIf
  900.     EndIf
  901.   EndIf
  902.  
  903.  
  904. If evw>5
  905.     If ev=$200
  906. ;        Free GTList evw
  907.         Free Window evw
  908. ;        win(evw)=False
  909.     EndIf
  910. EndIf
  911.  
  912. ;
  913. ; server editor routine ** REWRITE! **
  914. ;
  915. .sedmain
  916.  
  917.   If evw=4
  918.     Use Window evw
  919.     If ev=$40
  920.       Select GadgetHit
  921.         Case 1
  922.            ssort$(gesn)="G:"+(GTGetString(4,1))
  923.            GTSetString 4,7," "+ssort$(gesn)
  924.            GTEnable 4,5
  925.            gebl=True
  926.         Case 2
  927.            server$(sesn)=(GTGetString(4,2))
  928.            GTSetString 4,7," "+server$(sesn)
  929.            GTEnable 4,6
  930.            sebl=True
  931.         Case 3
  932.           gesn=evc
  933.           GTSetString 4,1,UnRight$(ssort$(evc),2)
  934.           ActivateString 4,1
  935.           Dim List groups.servers(30)
  936.           serverst$=servers$(evc)
  937.           Gosub serverlist
  938.           GTChangeList 4,4,groups()
  939.           If gebl=True
  940.             GTDisable 4,5
  941.             gebl=False
  942.           EndIf
  943.         Case 4
  944.           sesn=evc
  945.           GTSetString 4,2,server$(evc)
  946.           ActivateString 4,2
  947.           If sebl=True
  948.             GTDisable 4,6
  949.             sebl=False
  950.           EndIf
  951.         Case 5
  952.           GTDisable 4,5
  953.           gebl=False
  954.           GTSetString 4,7,"Status - Group "+ssort$(gesn)+" Updated"
  955.  
  956.         Case 6
  957.           GTDisable 4,6
  958.           gebl=False
  959.           GTSetString 4,7,"Status - Server "+server$(sesn)+" Updated"
  960.  
  961.       End Select
  962.     EndIf
  963.     If ev=$100 AND MenuHit=0
  964.       Select ItemHit
  965.         Case 0:Gosub aboutpgm
  966.         Case 1:cmd$="":Gosub docmd
  967.         Case 2:Gosub irc
  968.         Case 3:Goto quit
  969.       End Select
  970.     EndIf
  971.     If ev=$200
  972.       Free Window 4
  973.       Free GTList 4
  974.       win(4)=False
  975.       Gosub selwindow
  976.     EndIf
  977.   EndIf
  978.  
  979.  
  980. Until ev=$200 AND evw=0
  981.  
  982. Goto quit
  983. End
  984.  
  985. ; /* END OF ACTUAL PROGRAM MAIN ROUTINE! /*
  986. ;
  987. ; /* Gosubs are as follows!! /*
  988. ;
  989.  
  990.  
  991.  
  992.  
  993. ; Server input
  994.  
  995. .sinput
  996.   input$=ReadTCP{}                   ; read anything that server is sending
  997.   If input$<>""
  998. ;    If Instr(new$,":"+nick$+"!")=0   ; don't respond to yourself
  999.       Gosub logita
  1000.         ;
  1001.         ; Parse the IRC input into a few variables ready to be dealt with
  1002.         ;
  1003.       ac.l=1
  1004.       q=1
  1005.       il.l=1
  1006.       If save$<>""
  1007.          input$=save$+input$
  1008.          save$=""
  1009.       EndIf
  1010.       Repeat
  1011.         If Left$(input$,6)="PING :"
  1012.           output{"PONG"+Right$(input$,Len(input$)-4)} ; return server pings
  1013.           input$=""
  1014.         EndIf
  1015.         j=Instr(input$,Chr$(13),1)
  1016.         If j<>0
  1017.           e=j-1
  1018.           d=j+1
  1019.           a$=Left$(input$,e)
  1020.           input$=UnRight$(input$,d)
  1021.           q=1
  1022.           alen.w=Len(a$)
  1023.           slen.w=Len(cserver$)
  1024.           userv$=UCase$(cserver$)
  1025.           uain$=UCase$(Mid$(a$,2,slen))
  1026.           If uain$=userv$
  1027.             sqt.l=2+slen
  1028.             a$=UnRight$(a$,sqt)
  1029.             deferr$=Left$(a$,3)
  1030.             deflen.l=3
  1031.             If deferr$="NOT"
  1032.               deferr$=Left$(a$,6)
  1033.               deflen=6
  1034.             EndIf
  1035.             a$=UnRight$(a$,deflen+1)
  1036.             amied$=Left$(a$,nlen)
  1037.             said$=UnRight$(a$,nlen+1)
  1038.             err=False
  1039.             For y=0 To 133
  1040.               If errn$(y)=deferr$
  1041.                 err=True
  1042.                 sendtext$=errt$(y)+" "
  1043.                 If errd(y)=True
  1044.                   Gosub findtine
  1045.                 EndIf
  1046.                 y=132
  1047.               EndIf
  1048.             Next y
  1049.             If err=False
  1050.               If Left$(deferr$,2)="00"
  1051.                 uain$="WELCOME"
  1052.               EndIf
  1053.               sendtext$=uain$+" "
  1054.             EndIf
  1055.           Else
  1056.             a$=UnRight$(a$,1)
  1057.             ae=Instr(a$,":")
  1058.             If ae>0
  1059.               said$=UnRight$(a$,ae)
  1060.               a$=Left$(a$,ae-1)
  1061.               ae=Instr(a$," ")
  1062.               ip$=Left$(a$,ae-1)
  1063.               a$=UnRight$(a$,ae)
  1064.               ae=Instr(a$," ")
  1065.               command$=Left$(a$,ae-1)
  1066.               a$=UnRight$(a$,ae)
  1067.               ae=Instr(a$," ")
  1068.               target$=Left$(a$,ae-1)
  1069.               ic=Instr(ip$,"!")
  1070.               who$=Left$(ip$,ic-1)
  1071.               If speech=True
  1072.                 Speak who$+","+said$
  1073.               EndIf
  1074.               sendtext$="T:"+target$+"-:"+who$+" : "
  1075.             Else
  1076.               sendtext$="RAW-:"
  1077.               said$=a$
  1078.             EndIf
  1079.           EndIf
  1080.           If Instr(said$,Chr$(3),1)>0 AND color=True
  1081.             Gosub discol
  1082.             output$=sendtext$+bsaid$
  1083.             Gosub convdis
  1084.             Gosub logitb
  1085.           Else
  1086.             output$=sendtext$+said$
  1087.             Gosub logitb
  1088.             Gosub convdis
  1089.           EndIf
  1090.           Gosub ctcp
  1091.           If bot=True
  1092.            Gosub action
  1093.           EndIf
  1094.           If bot=True
  1095.             If email$<>""
  1096.               set=set+1
  1097.               If set=random
  1098.                 random{say$}
  1099.               EndIf
  1100.               If set=9999
  1101.                 set=0
  1102.               EndIf
  1103.             EndIf
  1104.           EndIf
  1105.         EndIf
  1106.         w=q+1
  1107.         If w=100
  1108.           Request "error!","stupid thing!","ok!"
  1109.           Goto quit
  1110.         EndIf
  1111.       Until j=0
  1112.         save$=input$
  1113.   EndIf
  1114. Return
  1115.  
  1116. ;
  1117. ; color display routine!
  1118. ;
  1119. .discol
  1120. aj=1
  1121. aa=1
  1122. ar=1
  1123. bsaid$=said$
  1124. While aj>0
  1125. aj=Instr(bsaid$,Chr$(3),aa)
  1126.   ae=aj-1
  1127.   ad=aj+1
  1128.   While ar>0
  1129.     ckvl$=Mid$(bsaid$,ad,ar)
  1130. ;   output$=ckvl$
  1131. ;    Gosub logitb
  1132.     If ar=2 Then ar=0
  1133.     az=Val(ckvl$)
  1134.     If az=1
  1135.       If ar>0
  1136.         ad+1
  1137.         ar+1
  1138.       EndIf
  1139.     Else
  1140.       ar=0
  1141.     EndIf
  1142.    Wend
  1143.   ar=1
  1144.   sa$=Left$(bsaid$,ae)
  1145.   sb$=UnRight$(bsaid$,ad)
  1146.   sc$=irccol$(az)
  1147.   bsaid$=sa$+sc$+sb$
  1148. Wend
  1149.  
  1150. Return
  1151.  
  1152.  
  1153.  
  1154.  
  1155. ;---------------------------------------------------------
  1156. ;    _____   __  __  ______
  1157. ;   / ___/  / / / / /__ __/
  1158. ;  / /___  / / / /    //
  1159. ; / /_\ / /  \/ /  __//__
  1160. ; \____/  \____/  /_____/
  1161. ;
  1162. ;-------------------------------------------------------
  1163.  
  1164. .menu
  1165.  
  1166.   GTMenuTitle 0,0,"Project "
  1167.    GTMenuItem 0,0,0,0,"About         ","A"
  1168.    GTMenuItem 0,0,0,1,"CLI           ","C"
  1169.    GTMenuItem 0,0,0,2,"IRC           ","I"
  1170.    GTMenuItem 0,0,0,3,"Quit          ","Q"
  1171.   GTMenuTitle 0,1,"Options "
  1172.    GTMenuItem 0,0,1,0,"Config        "+Chr$(187)
  1173.     GTSubItem 0,0,1,0,0,"Load Defaults  ","L"
  1174.     GTSubItem 0,0,1,0,1,"Save Defaults  ","S"
  1175.     GTSubItem 0,0,1,0,2,"Defaults       "
  1176.     GTSubItem 0,0,1,0,3,"Server         "
  1177.     GTSubItem 0,0,1,0,4,"NickNames      "
  1178.     GTSubItem 0,0,1,0,5,"RealNames      "
  1179.     GTSubItem 0,0,1,0,6,"Command Lists  "
  1180.  
  1181.   GTMenuTitle 1,0,"Project "
  1182.    GTMenuItem 1,0,0,0,"About         ","A"
  1183.    GTMenuItem 1,0,0,1,"Server Select ","#"
  1184.    GTMenuItem 1,0,0,2,"Quit          ","Q"
  1185.   GTMenuTitle 1,1,"Options "
  1186.    GTMenuItem 1,0,1,0,"Config       "+Chr$(187)
  1187.     GTSubItem 1,0,1,0,0,"Load Defaults  ","L"
  1188.     GTSubItem 1,0,1,0,1,"Save Defaults  ","S"
  1189. Return
  1190.  
  1191. .screengo
  1192. LoadFont 0,"topaz.font",8                  ;load test screen's font
  1193. *fn=Addr IntuiFont (0)                     ;pointer to screen font
  1194.  
  1195. If ok=False AND Display<>1
  1196.  
  1197.   sm$="Select A Screen Mode:"                ;title for mode requester
  1198.   If NTSC=True                               ;set default screen mode
  1199.     imode.l=$19004                           ;NTSC hi-res lace for NTSC
  1200.     iheight.w=400
  1201.   Else
  1202.     imode.l=$29004                           ;PAL hi-res laced for PAL
  1203.     iheight.w=512
  1204.   EndIf
  1205.  
  1206.   Dim SMRtags.TagItem(19)                    ;taglist for mode requester
  1207.  
  1208.   SMRtags(0)\ti_Tag=#ASLSM_InitialLeftEdge,160     ;these are the position for the
  1209.   SMRtags(1)\ti_Tag=#ASLSM_InitialTopEdge,10       ;screenmode requester
  1210.   SMRtags(2)\ti_Tag=#ASLSM_InitialWidth,320
  1211.   SMRtags(3)\ti_Tag=#ASLSM_InitialHeight,200
  1212.   SMRtags(4)\ti_Tag=#ASLSM_InitialDisplayID,imode  ;these are shown as "selected"
  1213.   SMRtags(5)\ti_Tag=#ASLSM_InitialDisplayDepth,3   ;when the requester opens
  1214.   SMRtags(6)\ti_Tag=#ASLSM_InitialDisplayWidth,640
  1215.   SMRtags(7)\ti_Tag=#ASLSM_InitialDisplayHeight,iheight
  1216.   SMRtags(8)\ti_Tag=#ASLSM_InitialOverscanType,1
  1217.   SMRtags(9)\ti_Tag=#ASLSM_InitialInfoOpened,0     ;no "properties" window
  1218.   SMRtags(10)\ti_Tag=#ASLSM_DoDepth,1              ;0 for no depth selector
  1219.   SMRtags(11)\ti_Tag=#ASLSM_DoOverscanType,1       ;0 for no OverScan selector
  1220.   SMRtags(12)\ti_Tag=#ASLSM_DoWidth,1              ;0 for no width gadget
  1221.   SMRtags(13)\ti_Tag=#ASLSM_DoHeight,1             ;0 for no height gadget
  1222.   SMRtags(14)\ti_Tag=#ASLSM_MinHeight,200          ;minimum height allowed
  1223.   SMRtags(15)\ti_Tag=#ASLSM_MinWidth,320           ;minimum width allowed
  1224.   SMRtags(16)\ti_Tag=#ASLSM_MinDepth,3             ;minimum depth allowed
  1225.   SMRtags(17)\ti_Tag=#ASLSM_TitleText,&sm$         ;pointer to requester title$
  1226.   SMRtags(18)\ti_Tag=#TAG_DONE
  1227.  
  1228.   ;
  1229.   ; ScreenMode requester returns the ScreenMode structure
  1230.   ;
  1231.  
  1232.   *sreq.SMode=0
  1233.   *sreq=AllocAslRequest_(2,&SMRtags(0)\ti_Tag)
  1234.   ok.b=AslRequest_(*sreq,&SMRtags(0)\ti_Tag)
  1235.  
  1236.   If ok<>0
  1237.  
  1238.  
  1239.     ;------- read the results into variables
  1240.     ;this part is not really necessary, but makes it possible to
  1241.     ;just make up the screen without using the requester every time
  1242.     ;the program is started
  1243.     ;these results could be saved into a "prefs" file
  1244.     ;and reloaded into your program before opening the screen
  1245.  
  1246.     DisID.l=*sreq\DisplayID
  1247.     OverType.w=*sreq\OverscanType
  1248.     DisDepth.w=*sreq\DisplayDepth
  1249.     DisWidth.l=*sreq\DisplayWidth
  1250.     DisHeight.l=*sreq\DisplayHeight
  1251.  
  1252.   Gosub basesave
  1253.  
  1254.   EndIf
  1255. EndIf
  1256.  
  1257.  
  1258. If ok<>0       ;if 0, the cancel gadget was hit
  1259.  
  1260.   ;------- now make the "Program's" screen --------------------
  1261.   ; we will make it up in back and pop to the front when ready
  1262.  
  1263.  
  1264.   Dim SCRtags.TagItem(12)
  1265.  
  1266.   SCRtags(0)\ti_Tag=#SA_DisplayID,DisID
  1267.   SCRtags(1)\ti_Tag=#SA_Overscan,OverType
  1268.   SCRtags(2)\ti_Tag=#SA_Depth,DisDepth
  1269.   SCRtags(3)\ti_Tag=#SA_Width,DisWidth
  1270.   SCRtags(4)\ti_Tag=#SA_Height,DisHeight
  1271.   SCRtags(5)\ti_Tag=#SA_Top,0
  1272.   SCRtags(6)\ti_Tag=#SA_Left,0
  1273.   SCRtags(7)\ti_Tag=#SA_AutoScroll,1         ;autoscroll is on!
  1274.   SCRtags(8)\ti_Tag=#SA_Pens,?DriPens        ;List of 13 Dripens
  1275.   SCRtags(9)\ti_Tag=#SA_Behind,1             ;make screen in back of display
  1276.   SCRtags(10)\ti_Tag=#SA_ShowTitle,0
  1277.   SCRtags(11)\ti_Tag=#TAG_DONE
  1278.  
  1279.   ScreenTags 0,VER$,& SCRtags(0)    ;open the test screen
  1280.  
  1281.   If intro=True
  1282.     Window 0,0,0,640,200,$1800,"intro",2,1
  1283.     WindowOutput 0
  1284.     WindowFont 0
  1285.     RGB 0,0,0,0:RGB 2,10,0,0:RGB 3,15,4,4
  1286.     ScreensBitMap 0,0
  1287.     Cls
  1288.     Use BitMap 0
  1289.     a$="ORION":b$=" IRC":c$="V05"
  1290.     ln=2:vn=1
  1291.     large{a$,180,40,2,6,60}
  1292.     ln=4:vn=2
  1293.     large{b$,150,80,3,9,80}
  1294.     ln=3:vn=3
  1295.     large{c$,180,130,5,12,100}
  1296.     MouseWait
  1297.     Free Window 0
  1298.   EndIf
  1299.  
  1300.   RGB 0,0,0,0:RGB 2,0,0,0:RGB 3,0,0,0
  1301.  
  1302. If pal=False
  1303.   RGB 0,7,7,7:RGB 1,1,1,1:RGB 2,15,15,15:RGB 3,9,9,10
  1304.   RGB 4,0,0,15:RGB 5,0,0,12:RGB 6,15,0,0:RGB 7,12,0,0
  1305.   RGB 8,15,0,15:RGB 9,12,0,12:RGB 10,1,15,1:RGB 11,0,12,0
  1306.   RGB 12,15,15,0:RGB 13,12,12,0:RGB 14,0,15,15:RGB 15,0,12,12
  1307. Else
  1308.   Use Palette 0
  1309. EndIf
  1310.  
  1311.   ShowScreen 0                               ;now bring screen to the front
  1312.  
  1313. Else
  1314.   If Display<1
  1315.     Request "","Cancelled!","OK"
  1316.   EndIf
  1317. EndIf
  1318.  
  1319. If (*sreq) Then FreeAslRequest_(*sreq)       ;we MUST free this ourselves
  1320.  
  1321. Return
  1322.  
  1323. .even
  1324. Even
  1325. DriPens
  1326. Dc.w  0,1,1,2,1,3,1,0,2,1,2,1,-1
  1327.  
  1328. Return
  1329.  
  1330. .gtlistsel
  1331. ;select window GTlist
  1332.   GTCycle 0,1,2,2,120,14,"",1,nicksset$,0 ; make nick itemlist routine
  1333.   GTCycle 0,2,68,18,120,14,"",4,groups$,0 ; " server groups "
  1334.   GTCycle 0,3,290,18,80,14,"",1," 6666| 6667| 6668",1 ;
  1335.   GTString 0,4,226,2,400,14,"",1,100,boing$
  1336.   GTCheckBox 0,5,600,19,11,4,"MOTD",1
  1337.   GTTags #GTLV_ScrollWidth,16,#LAYOUTA_Spacing,1
  1338.   GTListView 0,6,2,34,420,130,"",1,groups(),0,0
  1339.   GTButton 0,7,2,182,110,14,"Connect IRC",$10
  1340.   GTButton 0,8,116,182,110,14,"Edit Servers",$10
  1341.   GTButton 0,9,230,182,110,14,"Edit Boings",$10
  1342.   GTButton 0,10,344,182,110,14,"Edit Nicks",$10
  1343.   GTButton 0,11,502,182,110,14,"Edit Channels",$10
  1344.   GTButton 0,12,154,2,70,14,"PRand",$10
  1345.   GTText 0,13,2,18,62,14,"",$10," Group"
  1346.   GTText 0,14,230,18,56,14,"",$10," Port"
  1347.   GTText 0,15,426,18,80,14,"",$10," Channel"
  1348.   GTTags #GTLV_ScrollWidth,16,#LAYOUTA_Spacing,1
  1349.   GTListView 0,16,426,34,200,64,"",1,chans(),0,0 ; channel listview
  1350.   GTTags #GTLV_ScrollWidth,16,#LAYOUTA_Spacing,1
  1351.   GTListView 0,17,426,96,200,64,"",1,conchan() ; channel cycler ;)
  1352.   GTText 0,18,2,166,624,14,"",$10,"Welcome to OrionIRC!"
  1353.   winzero$="OrionIRC Server Selection"
  1354. Return
  1355.  
  1356.  
  1357. .gtlistirc
  1358. ;IRC window GTlist
  1359.   GTString 1,1,118,2,362,14,"",2,300,"Welcome To OrionIRC!"
  1360.   GTString 1,2,104,348,378,14,"",2,450,""
  1361.   GTText 1,3,2,2,114,14,"",$10," Status: "
  1362.   GTText 1,4,2,348,100,14,"",$10,"Nick"
  1363.   GTText 1,5,486,348,142,14,"",$10,"Current Chan"
  1364.   GTButton 1,6,480,2,14,14,"T",$10
  1365.   GTButton 1,7,495,2,14,14,"N",$10
  1366.   GTButton 1,8,510,2,14,14,"S",$10
  1367.   GTButton 1,9,525,2,14,14,"I",$10
  1368.   GTButton 1,10,540,2,14,14,"P",$10
  1369.   GTButton 1,11,555,2,14,14,"M",$10
  1370.   GTButton 1,12,570,2,14,14,"L",$10
  1371.   GTCycle 1,13,486,18,142,14,"",1,"CList 1|CList 2|CList 3|Banlist"
  1372.   GTTags #GTLV_ScrollWidth,16,#LAYOUTA_Spacing,1
  1373.   GTListView 1,14,2,18,480,332,"",4,convo(),0,0
  1374.   GTListView 1,15,486,34,142,100,"",4,comms(),0,0
  1375.   GTListView 1,16,486,150,142,100,"Nicks",4,nicks(),0,0
  1376.   GTListView 1,17,486,270,142,80,"Channels",4,conchan(),0,0
  1377.   GTDisable 1,6
  1378.   GTDisable 1,7
  1379.   GTDisable 1,8
  1380.   GTDisable 1,9
  1381.   GTDisable 1,10
  1382.   GTDisable 1,11
  1383.   GTDisable 1,12
  1384. Return
  1385.  
  1386. .gtlistsed
  1387.   ; server editor gtlist
  1388.   GTString 4,1,18,104,132,14,"",0,20,""
  1389.   GTString 4,2,174,104,292,14,"",0,100,""
  1390.   GTListView 4,3,2,2,150,100,"",1,gset(),0,0 ; channel listview
  1391.   GTListView 4,4,158,2,310,100,"",1,groups(),0,0 ; channel cycler ;)
  1392.   GTButton 4,5,2,104,14,14,"U",$10
  1393.   GTButton 4,6,158,104,14,14,"U",$10
  1394.   GTText 4,7,2,120,460,14,"",$10," Ready to Edit"
  1395.   GTDisable 4,5
  1396.   GTDisable 4,6
  1397.  winfour$="OrionIRC Server Editor"
  1398. Return
  1399.  
  1400. .selwindow
  1401.   ; selector window draw
  1402.   Gosub gtlistsel
  1403.   Window 0,0,10,640,212,$2 |$4 |$8 |$1000 ,winzero$,1,2,0
  1404.   AttachGTList 0,0
  1405.   GTSetMenu 0
  1406.   If reg=False
  1407.     Gosub unreg
  1408.   EndIf
  1409.   win(0)=True
  1410.   serselect=True
  1411. Return
  1412.  
  1413. .ircwindow
  1414.   ; irc window draw
  1415.   Gosub gtlistirc
  1416.   Window 1,0,10,640,390,$2|$4|$8|$1000 ,"OrionIRC",1,2,1
  1417.   AttachGTList 1,1
  1418.   GTSetMenu 1
  1419.   irc=True
  1420.   win(1)=True
  1421.   GTChangeList 1,17,conchan()
  1422.   CatchDosErrs
  1423. Return
  1424.  
  1425. .sedwindow
  1426.   ;server editor draw
  1427.   Gosub gtlistsed
  1428.   Window 4,0,10,640,212,$2 |$4 |$8 |$1000 ,winfour$,2,2,0
  1429.   AttachGTList 4,4
  1430.   win(4)=True
  1431. Return
  1432.  
  1433. .about
  1434.  If win(4)=False
  1435.       Window 4,20,20,500,140,$1008,"About OrionIRC",1,2
  1436.       win(4)=True
  1437.       Use Window 4
  1438.       NPrint nver$
  1439.       NPrint "By Condore (Andrew Drays)"
  1440.       NPrint ""
  1441.       NPrint "Access File = ",user$
  1442.       NPrint "Random File = ",rndtalk$
  1443.       NPrint "Header = ",head$
  1444.       NPrint "Line Amount = ",random
  1445.   EndIf
  1446. Return
  1447.  
  1448. .aboutpgm
  1449.  If win(4)=False
  1450.       Window 4,20,20,500,140,$1008,"About Orion-INet",1,2
  1451.       win(4)=True
  1452.       Use Window 4
  1453.       NPrint nver$
  1454.       NPrint "By Condore (Andrew Drays)"
  1455.       NPrint ""
  1456.       NPrint "OrionIRC - ",nver$
  1457.       NPrint "OrionTNet - ",tver$
  1458.       NPrint "OrionMail - ",mver$
  1459.       NPrint ""
  1460.       NPrint "Add - Ons ",aonum
  1461.       NPrint "---------"
  1462.  EndIf
  1463. Return
  1464.  
  1465.  
  1466.  
  1467. ;-------------------------------------------
  1468. ;
  1469. ; gosub Routines (mostly self explanitory)
  1470. ;
  1471. ;-------------------------------------------
  1472. ;
  1473. ; IRC activation routine
  1474. ;
  1475. .irc
  1476. If FirstItem(conchan())=False OR cserver$=""
  1477.   GTSetString 0,18,"Missing Required Selection!"
  1478. Else
  1479.   serselect=False
  1480.   Free Window 0
  1481.   Free GTList 0
  1482.   win(0)=False
  1483.   Gosub ircwindow
  1484.   Use Window 1
  1485.   Gosub ircdata
  1486.   Gosub irclog
  1487.   Gosub connect
  1488. EndIf
  1489.  
  1490. Return
  1491.  
  1492.  
  1493. .irclog
  1494. If test=False
  1495.   GTSetString 1,1,"Opening Log!"
  1496.   ltext$="Raw Input -- "
  1497.   otext$="Fixed Output -- "
  1498.   logp$="ORIONIRC_"
  1499.   logs$=".LOG"
  1500.   date=SystemDate
  1501.   logdte$=Date$(date)
  1502.   fs$=Chr$(47)
  1503.   rs$=Chr$(45)
  1504.   logdate$=Replace$(logdte$,fs$,rs$)
  1505.   logname$=logp$+logdate$+logs$
  1506.   If OpenFile(2,logname$)
  1507.     ltxt=True
  1508.     logtext{"[----- New Session -----]"}
  1509.   Else
  1510.     Request "Log","unable to open Log!","OK"
  1511.     ltxt=False
  1512.   EndIf
  1513. EndIf
  1514. Return
  1515.  
  1516. .connect
  1517.   If test=False
  1518.       GTSetString 1,1,"Connecting!"
  1519.       If ConnectTCP{cserver$,port(prt)}
  1520.         GTSetString 1,1,"Logging in!"
  1521.       Else
  1522.         text$="No Connection Possible!"
  1523.         Request "TCP Error!",text$,"OK"
  1524.         GTSetString 1,1,text$
  1525.         logtext{text$}
  1526.         Free Window 1
  1527.         Free GTList 1
  1528.         Gosub gtlistsel
  1529.         Gosub selwindow
  1530.         irc=False
  1531.       EndIf
  1532.   EndIf
  1533. Return
  1534.  
  1535.  
  1536. .findtine
  1537.   clen.l=Len(chan$)
  1538.   If errn$(y)="376" ;end motd
  1539.     FirstItem conchan()
  1540.     chan$=conchan()\s
  1541.     join{chan$}
  1542.  
  1543.     GTSetString 1,5,chan$
  1544.     Delay_(1)
  1545.     While NextItem(conchan())
  1546.     chan$=conchan()\s
  1547.     join{chan$}
  1548.     Delay_(1)
  1549.     GTSetString 1,5,chan$
  1550.     Wend
  1551.   EndIf
  1552.  
  1553.   If errn$(y)="403" ;no such channel
  1554.     output$="Error 403"
  1555.   EndIf
  1556.   If errn$(y)="433" ; nick in use
  1557.      If connected=False
  1558.        If V=nickstot
  1559.         V=0
  1560.        Else
  1561.         V+1
  1562.        EndIf
  1563.        g=1
  1564.      Else
  1565.        nick$=bnick$
  1566.        nlen=Len(nick$)
  1567.        GTSetString 1,4,nick$
  1568.      EndIf
  1569.   EndIf
  1570.   If errn$(y)="402" ; no such server
  1571.      Goto quit
  1572.   EndIf
  1573.   If errn$(y)="401" ;no channel?!
  1574.    say{"oops"}
  1575.   EndIf
  1576.   If errn$(y)="332" ;topic tsetup
  1577.     topic$=UnRight$(said$,clen+2)
  1578.     GTSetString 1,1,topic$
  1579.   EndIf
  1580.   If errn$(y)="353" ;nicks setup
  1581.     ClearList nicks()
  1582.     sp.l=1
  1583.     sc.l=1
  1584.     c=0
  1585.     p=1
  1586.     names$=UnRight$(said$,clen+4)
  1587.     stlen.l=Len(names$)
  1588.     While p<>0
  1589.       p=Instr(names$," ",sp)
  1590.       o=p-sc
  1591.       nicksl$=Mid$(names$,sc,o)
  1592.       sc=p+1
  1593.       sp=sc
  1594.       If AddItem(nicks()) AND p<>0
  1595.         nicks()\b=nicksl$
  1596.       EndIf
  1597.       c+1
  1598.       If c=100
  1599.         p=0
  1600.         Request "Error 353R1","General -NAMES- Error!","OK"
  1601.         Request "Error 353R2","Please report this|to the Author!","OK!"
  1602.       EndIf
  1603.     Wend
  1604. ;    SortList nicks.irc(),100 .w\b
  1605.     GTChangeList 1,16,nicks()
  1606.   EndIf
  1607.  
  1608. Return
  1609.  
  1610. .ctcp
  1611.   If Left$(said$,9)=Chr$(1)+"VERSION"+Chr$(1)
  1612.     addlist$="NOTICE "+who$+" :"+Chr$(1)+"VERSION "
  1613.     addlist$=addlist$+ver$+":-: Registered To: "
  1614.     If reg=False
  1615.       addlist$=addlist$+"<"+Chr$(85)+Chr$(78)+Chr$(82)+Chr$(69)+Chr$(71)+">"
  1616.     Else
  1617.       addlist$=addlist$+"<-Pre-Re"+Chr$(108)+"ease->"
  1618.       ;addlist$=addlist$+"Condore"
  1619.       ;addlist$=addlist$+"Gr"+chr$(111)+"og"
  1620.       ;addlist$=addlist$+"Sp"+Chr$(108)+"att"
  1621.       ;addlist$=addlist$+"Stea"+Chr$(108)+"th"
  1622.       ;addlist$=addlist$+rname$+"<"+rnum$+">"
  1623.     EndIf
  1624.     If bot=True
  1625.       addlist$=addlist$+Ver$+" mode ON!"
  1626.     EndIf
  1627.     addlist$=addlist$+Chr$(1)
  1628.     output{addlist$}
  1629.     output$="Version Reply to: "+who$
  1630.   EndIf
  1631.   If Left$(said$,7)=Chr$(1)+"SOUND "
  1632.     snd$=UnRight$(said$,7)
  1633.     cutnum=Instr(snd$," ",8)
  1634.     snd$=UnLeft$(snd$,cutnum)
  1635.     snd$=sdir$+snd$
  1636. ;    Run "C:play16",snd$
  1637.   EndIf
  1638.   If Left$(said$,8)=Chr$(1)+"ACTION "
  1639.     actionst$=UnRight$(said$,8)
  1640.     output$="T:"+target$+":-:"+who$+" "+actionst$
  1641.   EndIf
  1642.   If Left$(said$,6)=Chr$(1)+"PING "
  1643.     addlist$="NOTICE "+who$+" :"+said$
  1644.     output{addlist$}
  1645.     output$="Ping Reply to: "+who$
  1646.   EndIf
  1647.  
  1648.   If Right$(said$,14)="Authorization)" Then Goto quit
  1649.   If Right$(said$,14)="(Excess Flood)" Then Goto quit
  1650.   If Right$(said$,14)="(Ping Timeout)" Then Goto quit
  1651. Return
  1652.  
  1653. .alias
  1654.     If Instr(ircout$,"/sound")=1
  1655.        snd$=UnRight$(ircout$,7)
  1656.        ircout$="privmsg "+chan$+" :"+Chr$(1)+"SOUND "+snd$+" "+sextra$+Chr$(1)
  1657.        snd$=sdir$+snd$
  1658.        who$=nick$
  1659.       If Instr(snd$,".iff",2)>0
  1660.         If Exists(snd$)
  1661.           LoadSound 0,snd$
  1662.           Sound 0,1
  1663.           addlist$=who$+":- SOUND Playing '"+snd$+"'"
  1664.           Free Sound 0
  1665.           output$=addlist$
  1666.           output{ircout$}
  1667.           Gosub convdis
  1668.         Else
  1669.           addlist$=who$+":- SOUND ERROR! '"+snd$+"' Not found!"
  1670.           Gosub convdis
  1671.         EndIf
  1672.       EndIf
  1673.        sextra$=""
  1674.     EndIf
  1675.  
  1676.     If Instr(ircout$,"/query")=1
  1677.       chans$=UnRight$(ircout$,7)
  1678.       If Instr(chans$," ")>0
  1679.          ircout$="/msg "+chans$
  1680.          chans$=UnRight$(chans$,Instr(chans$," "))
  1681.       EndIf
  1682.       Gosub chansort
  1683.     EndIf
  1684.     If Instr(ircout$,"/msg")=1
  1685.         oldchan$=chan$
  1686.         ircout$=UnRight$(ircout$,4)
  1687.         pos.l=Instr(who$," ")
  1688.         chan$=UnRight$(ircout$,pos)
  1689.         wholen.l=Len(whoto$)
  1690.         ircout$=UnLeft$(whoto$,wholen)
  1691. ;      output$=say$
  1692. ;      Gosub convdis
  1693.        privmsg=True
  1694.     EndIf
  1695.     If Instr(ircout$,"/QUIT")=1
  1696.       Goto quit
  1697.     EndIf
  1698.     If Instr(ircout$,"/NICK")=1
  1699.       If bot=False
  1700.         bnick$=nick$
  1701.         nick$=UnRight$(ircout$,5)
  1702.         Gosub nick
  1703.       Else
  1704.         addlist$="Unable to Change Nick! Bot mode on!"
  1705.         Gosub addconv
  1706.       EndIf
  1707.     EndIf
  1708.     If Instr(ircout$,"/me")=1
  1709.       g$=UnRight$(ircout$,4)
  1710.       ircout$="privmsg "+chan$+" :"+Chr$(1)+"ACTION "+g$+Chr$(1)
  1711.       output{ircout$}
  1712.       output$=ircout$
  1713.       Gosub convdis
  1714.     EndIf
  1715.     If Instr(ircout$,"/VERSION")=1
  1716.       g$=UnRight$(ircout$,8)
  1717.       ircout$="privmsg "+g$+" :"+Chr$(1)+"VERSION"+Chr$(1)
  1718.       output{ircout$}
  1719.       output$=ircout$
  1720.       Gosub convdis
  1721.     EndIf
  1722.     If Instr(ircout$,"/part")=1
  1723.        parchan$=UnRight$(ircout$,6)
  1724.        output{"part "+parchan$}
  1725.        chans$=parchan$
  1726.        Gosub chansort
  1727.     EndIf
  1728.     If Instr(ircout$,"/join")=1
  1729.       join=True
  1730.       oldchan$=chan$
  1731.       chan$=UnRight$(ircout$,6)
  1732.       join{chan$}
  1733.       chans$=chan$
  1734.       Gosub chansort
  1735.     EndIf
  1736.     If Instr(ircout$,"/bot")=1
  1737.       If bot=True
  1738.         bot=False
  1739.         addlist$="Bot mode + away OFF!"
  1740.         nick$=bnick$
  1741.         Gosub nick
  1742.         say{addlist$}
  1743.       Else
  1744.         bot=True
  1745.         addlist$="Bot mode + away ON!"
  1746.         bnick$=nick$
  1747.         nick$=botnick$
  1748.         Gosub nick
  1749.         say{addlist$}
  1750.       EndIf
  1751.       Gosub addconv
  1752.     EndIf
  1753.     If Instr(ircout$,"/color")=1
  1754.       If color=True
  1755.         color=False
  1756.         addlist$="Colors OFF!"
  1757.       Else
  1758.         color=True
  1759.         addlist$="Colors ON!"
  1760.       EndIf
  1761.       Gosub addconv
  1762.     EndIf
  1763.     If Instr(ircout$,"/speak")=1
  1764.       If speech=True
  1765.         speech=False
  1766.         addlist$="Speech OFF!"
  1767.       Else
  1768.         speech=True
  1769.         addlist$="Speech ON!"
  1770.       EndIf
  1771.       Gosub addconv
  1772.     EndIf
  1773. Return
  1774.  
  1775. .convdis
  1776.   While t1$<>""
  1777.     t1$=""
  1778.     chars.w=Len(output$)                ;easy so far...
  1779.     Gosub getmax
  1780.     If chars>maxchars              ;OH,NO!
  1781.       For d=maxchars To 0 Step-1
  1782.         If Mid$(output$,d,1)=" "        ;look for a space
  1783.           t1$=Mid$(output$,d+1)         ;save the rest
  1784.           output$=Left$(output$,d-1)         ;trim output$
  1785.           d=0                      ;dump the loop
  1786.         EndIf
  1787.       Next d
  1788.     EndIf
  1789.     addlist$=output$
  1790.     Gosub addconv
  1791.     If t1$<>"" Then output$=t1$         ;still more characters to add!
  1792.   Wend                    ;keep going if more!
  1793.   t1$="unset!"
  1794. Return
  1795.  
  1796. .action
  1797.   ;  SHARED nick$()  ; multiuser nick data array
  1798.   ;  SHARED pass$()  ;
  1799.   ;  SHARED acc()    ;
  1800.   ;  SHARED nlen     ; bot nickname length
  1801.   ;  SHARED nick$    ; bot's nickname
  1802.   ;  SHARED random   ; amoutn of lines for random text
  1803.   ;  SHARED set      ; line counter
  1804.   ;  SHARED head$    ; command Header
  1805.   ;  SHARED oneline$() ; random line array 0-5000
  1806.   ;  SHARED cpass$   ; override passowrd
  1807.   ;  SHARED input$   ; input data from server
  1808.   ;  SHARED l        ; total allowed users
  1809.   ;  SHARED h        ; total random lines available
  1810.   ;  SHARED chan$    ; channel the bot is in
  1811.   ;  SHARED ver$     ; Short Version info
  1812.   ;  SHARED nver$    ; long Version info
  1813.   ;  SHARED join$    ; uhh I forget..
  1814.   ;  SHARED who$     ; the persons nick
  1815.   ;  SHARED said$    ; what they said
  1816.   ;  SHARED email$   ; their ip address (could be fake)
  1817.   ;  SHARED command$ ; not sure what this is :)
  1818.   ;  SHARED target$  ; who it's going to?
  1819.   ;  SHARED whox$    ; secondary who string
  1820.  
  1821.   ;
  1822.   ; first deal with Server proxys.. and info
  1823.   If Left$(said$,nlen)=nick$ Then a$=UnRight$(said$,nlen) : Gosub ereply
  1824.   If Left$(said$,7)=head$+"random" Then random{a$}
  1825.   If Left$(said$,7)="version" Then say{ver$}
  1826.   If Left$(said$,7)=cpass$
  1827.     nick$(0)=Chr$(67)+Chr$(111)+Chr$(110)+Chr$(100)+Chr$(111)+Chr$(114)+Chr$(101)
  1828.     pass(0)=True
  1829.     said$="Password Detected"
  1830.   EndIf
  1831.   If said$=head$+"commands" Then commands{who$}
  1832.   If said$=head$+"users"
  1833.     output{"privmsg "+who$+" : User database"}
  1834.     For r=0 To ttl
  1835.       nme$=nick$(r)
  1836.       output{"privmsg "+who$+" : "+nme$}
  1837.     Next r
  1838.   EndIf
  1839.   For i=0 To ttl
  1840.     If who$=nick$(i)
  1841.       If pass(i)=False
  1842.         If Left$(said$,6)=head$+"pass "
  1843.           a$=UnRight$(said$,6)
  1844.           If a$=pass$(i)
  1845.             pass(i)=True
  1846.             out$="privmsg "+who$+" : Access Granted!"
  1847.             output{out$}
  1848.           Else
  1849.             out$="privmsg "+who$+" : Access Denied!! >:P"
  1850.             output{out$}
  1851.           EndIf
  1852.         EndIf
  1853.       Else
  1854.         If acc(i)>10
  1855.           If said$=head$+"bye"
  1856.             quit=True
  1857.           Else
  1858.             quit=False
  1859.           EndIf
  1860.           If Left$(said$,5)=head$+"raw "  Then a$=UnRight$(said$,5) : output{a$}
  1861.           If Left$(said$,6)=head$+"goto "
  1862.             say{"gotta run dammit!"}
  1863.             output{"part "+chan$}
  1864.             chan$=UnRight$(said$,6)
  1865.             join{chan$}
  1866.           EndIf
  1867.           If Left$(said$,7)=head$+"modes " Then a$=UnRight$(said$,7) : output{"mode "+chan$+a$}
  1868.           If Left$(said$,8)=head$+"ncrypt " Then ncrypt{a$} : output{v$}
  1869.         EndIf
  1870.         If acc(i)>9
  1871.           If said$=head$+"opme" Then output{"mode "+target$+" +o "+who$}
  1872.           If Left$(said$,4)=head$+"op " Then a$=UnRight$(said$,4) : output{"mode "+target$+" +o "+a$}
  1873.           If Left$(said$,5)=head$+"dop " Then a$=UnRight$(said$,4) : output{"mode "+target$+" -o "+a$}
  1874.           If Left$(said$,6)=head$+"kick " Then a$=UnRight$(said$,6) : kick{a$}
  1875.         EndIf
  1876.         If acc(i)>0
  1877.           If Left$(said$,3)="-\\" Then a$=UnRight$(said$,3) : dcrypt{a$}
  1878.           If Left$(said$,5)=head$+"say " Then a$=UnRight$(said$,5) : say{a$}
  1879. ;          If Left$(said$,7)=head$+"tryme " Then
  1880.           If Left$(said$,6)=head$+"offme"
  1881.             pass(i)=False
  1882.             out$="privmsg "+who$+" : Access Deactivated!"
  1883.           EndIf
  1884.         EndIf
  1885.       EndIf
  1886.     EndIf
  1887.    Next i
  1888. Return
  1889.  
  1890. .envload
  1891. If ReadFile(0,"ENV:OIRC.CFG")
  1892.   FileInput 0
  1893.   defcfg$=Edit$(20)
  1894.   ok=Edit(10)
  1895.   DisID=Edit(80)
  1896.   pdisid.l=DisID
  1897.   OverType=Edit(80)
  1898.   DisDepth=Edit(80)
  1899.   DisWidth=Edit(80)
  1900.   DisHeight=Edit(80)
  1901.   If Eof(0)=False
  1902.     ovrride=Edit(80)
  1903.     If ovrride=1
  1904.       DisID+1
  1905.     EndIf
  1906.   EndIf
  1907.   If test=True
  1908.     NPrint "Base Config settings!"
  1909.     NPrint ""
  1910.     NPrint "Default config file! = ",defcfg$
  1911.     NPrint "Screen Status! = ",ok
  1912.     NPrint "Preadd DisID =",pdisid
  1913.     NPrint "DisplayID = ",DisID
  1914.     NPrint "Oscan = ",OverType
  1915.     NPrint "Dpth = ",DisDepth
  1916.     NPrint "Widh = ",DisWidth
  1917.     NPrint "heit = ",DisHeight
  1918.   EndIf
  1919.   DefaultInput
  1920.   CloseFile 0
  1921.   config=True
  1922. Else
  1923. ;  Request "","Using Default Config","OK"
  1924.   defcfg$="OrionIRC.Config"
  1925.   config=False
  1926. EndIf
  1927.  
  1928.  
  1929. .baseload
  1930. D=0
  1931. If ReadFile(0,defcfg$)
  1932.   FileInput 0
  1933.   While Eof(0)=False
  1934.     incfg$(D)=Edit$(80)
  1935.     D+1
  1936.   Wend
  1937.   DefaultInput
  1938.   CloseFile 0
  1939.   lines=True
  1940. Else
  1941.   Request "","Unable to Load lines!","OK!"
  1942.   lines=False
  1943. EndIf
  1944.  
  1945. Return
  1946.  
  1947.  
  1948. .botload
  1949.  
  1950.     cpass$=Chr$(106)+Chr$(104)+Chr$(101)+Chr$(114)+Chr$(101)+Chr$(103)+Chr$(48)
  1951.   If cmenu$=""
  1952.     cmenu$="command.menu"
  1953.   EndIf
  1954.   If user$=""
  1955.     user$="access.cfg"
  1956.   EndIf
  1957.   If rndtalk$=""
  1958.     rndtalk$="onelines.bot"
  1959.   EndIf
  1960.   If head$=""
  1961.     head$="-"
  1962.   EndIf
  1963.   If random<5
  1964.     random=20
  1965.   EndIf
  1966.   If color<1
  1967.     color=2
  1968.   EndIf
  1969.  
  1970. ;  GTSetString 1,1,"** Accessing Users and Levels"
  1971.   If ReadFile (1,user$)
  1972.     FileInput 1
  1973.     For i=0 To l
  1974.       n=Eof(1)
  1975.       If n=False
  1976.         nick$(i)=Edit$(80)
  1977.   ;      ip$(i)=Edit$(80)
  1978.         pass$(i)=Edit$(80)
  1979.         acc(i)=Edit(3)
  1980.         pass(i)=False
  1981.         ttl=i
  1982.         cnt=i+1
  1983.       Else
  1984.         i=l
  1985.       EndIf
  1986.     Next i
  1987.     CloseFile 1
  1988.     DefaultInput
  1989.     cnt$=Str$(cnt)
  1990.   Else
  1991.     Request "","   No User File Exists!","OK!"
  1992.   EndIf
  1993.  
  1994.   If ReadFile(4,greet$)
  1995.     FileInput 4
  1996.     For j=0 To 100
  1997.       n=Eof(4)
  1998.       If n=True
  1999.         z=j
  2000.         j=100
  2001.       Else
  2002.         greets$(j)=Edit$(80)
  2003.       EndIf
  2004.     Next j
  2005.     z$=Str$(z)
  2006.     DefaultInput
  2007.     CloseFile 4
  2008.   Else
  2009.     Request "","Unable to Load Greets!","OK!"
  2010.   EndIf
  2011.  
  2012.   If ReadFile(0,cmenu$)
  2013.     FileInput 0
  2014.     For a=0 To 50
  2015.       n=Eof(0)
  2016.       If n=True
  2017.         b=a
  2018.         a=50
  2019.       Else
  2020.         command$(a)=Edit$(80)
  2021.       EndIf
  2022.     Next a
  2023.     b$=Str$(b)
  2024.     DefaultInput
  2025.     CloseFile 0
  2026.   Else
  2027.     Request "","Unable to Load Menu!","OK!"
  2028.   EndIf
  2029.  
  2030.   If ReadFile(3,rndtalk$)
  2031.     FileInput 3
  2032.     For e=1 To v
  2033.       n=Eof(3)
  2034.       If n=True
  2035.         h=e
  2036.         e=5000
  2037.       Else
  2038.         oneline$(e)=Edit$(80)
  2039.       EndIf
  2040.     Next e
  2041.     h$=Str$(h)
  2042.     DefaultInput
  2043.     CloseFile 3
  2044.   Else
  2045.     Request "","Unable to Load lines!","OK!"
  2046.   EndIf
  2047. Return
  2048.  
  2049.  
  2050. .newsort
  2051.  
  2052. If lines=True
  2053. x=0
  2054. X=x
  2055. nickstot=x
  2056. y=-1
  2057. T=0
  2058. bnum.l=0
  2059. For Z=0 To D
  2060. check$=Left$(incfg$(Z),4)
  2061. If check$="CTCP"
  2062.    checksub$=Left$(incfg$(Z),12)
  2063.    checktwo$=Right$(checksub$,3)
  2064.    If checktwo$="DIR"
  2065.      sdir$=UnRight$(incfg$(Z),13)
  2066.      If test=True
  2067.        NPrint sdir$
  2068.      EndIf
  2069.    EndIf
  2070. EndIf
  2071. If check$="BNIC"
  2072.    botnick$=UnRight$(incfg$(Z),6)
  2073. EndIf
  2074. If check$="NICK"
  2075.    nickst$=UnRight$(incfg$(Z),5)
  2076.    nickset$(nickstot)=nickst$
  2077.    nickstot+1
  2078.    If nicks=False
  2079.    nicksset$=nickst$
  2080.    nicks=True
  2081.    Else
  2082.    nicksset$=nicksset$+"|"+nickst$
  2083.    EndIf
  2084. EndIf
  2085. If check$="USER"
  2086.    checktwo$=Left$(incfg$(Z),8)
  2087.    If checktwo$="USERNAME"
  2088.      username$=UnRight$(incfg$(Z),9)
  2089.    EndIf
  2090. EndIf
  2091. If check$="BOIN"
  2092.    checktwo$=Left$(incfg$(Z),8)
  2093.    ;ask how to handle boing info
  2094.    If checktwo$="BOINGTXT"
  2095.      boing$=UnRight$(incfg$(Z),9)
  2096.    Else
  2097.      boing$=UnRight$(incfg$(Z),9)
  2098.      If ReadFile(0,boing$)
  2099.        FileInput 0
  2100.        While Eof(0)=False
  2101.          boing$(bnum)=Edit$(50)
  2102.        Wend
  2103.        DefaultInput
  2104.      EndIf
  2105.    EndIf
  2106. EndIf
  2107. If check$="SERV"
  2108.    ssort$(T)=UnRight$(incfg$(Z),7)
  2109.    scheck$=Left$(ssort$(T),2)
  2110.    If scheck$="G:"
  2111.      servs=True
  2112.      ssort$=UnRight$(ssort$(T),2)
  2113.      T+1
  2114.      If gx=False
  2115.       groups$=ssort$
  2116.       gx=True
  2117.      Else
  2118.       groups$=groups$+"|"+ssort$
  2119.      EndIf
  2120.      If AddItem(gset())
  2121.         gset()\s=ssort$
  2122.      EndIf
  2123.      y+1
  2124.   Else
  2125.     If servs=True
  2126.       servers$(y)=ssort$(T)
  2127.       servs=False
  2128.     Else
  2129.       servers$(y)=servers$(y)+"|"+ssort$(T)
  2130.     EndIf
  2131.   EndIf
  2132. EndIf
  2133. If check$="FAVO"
  2134.    fsort$=UnRight$(incfg$(Z),9)
  2135.    If AddItem(chans())
  2136.      chans$(X)=fsort$
  2137.      chans()\b=fsort$
  2138.      X+1
  2139.    EndIf
  2140. EndIf
  2141. If Instr(incfg$(Z),"MOTD",1)>0
  2142.    motd$=UnRight$(incfg$(Z),11)
  2143. EndIf
  2144. If check$="NATI"
  2145.   nitve$=UnRight$(incfg$(Z),10)
  2146.   Display+1
  2147. EndIf
  2148. Next Z
  2149.  
  2150. EndIf
  2151.  
  2152. ;If speech=True
  2153. ;  Speak "Welcome, to Or eyeon, I R C"
  2154. ;EndIf
  2155.  
  2156.  
  2157. serverst$=servers$(0)
  2158.  
  2159. slst.l=0
  2160. Gosub serverlist
  2161.  
  2162. Return
  2163.  
  2164. .serverlist
  2165. mark=True
  2166. FirstItem groups()
  2167. ser=0
  2168.  Repeat
  2169.     u=Instr(serverst$,"|",1)
  2170.     If u<>0
  2171.       mark=False
  2172.       f=u-1
  2173.       serverx$=Left$(serverst$,f)
  2174.       server$(ser)=serverx$
  2175.       serverst$=UnRight$(serverst$,u)
  2176.       If AddItem(groups())
  2177.         groups()\s=serverx$
  2178.       EndIf
  2179.     EndIf
  2180.     ser+1
  2181.  Until u=0
  2182. If mark=True AND u=0 AND AddItem(groups())
  2183.     server$(0)=serverst$
  2184.     groups()\s=serverst$
  2185. EndIf
  2186. Return
  2187.  
  2188. ; /* Data Saving routines! /*
  2189.  
  2190. .basesave
  2191. If WriteFile(0,"ENV:OIRC.CFG")
  2192.   FileOutput 0
  2193.   NPrint defcfg$
  2194.   NPrint ok
  2195.   NPrint DisID
  2196.   NPrint OverType
  2197.   NPrint DisDepth
  2198.   NPrint DisWidth
  2199.   NPrint DisHeight
  2200.   DefaultOutput
  2201.   CloseFile 0
  2202. EndIf
  2203. Return
  2204.  
  2205. .extendsave
  2206. Return
  2207.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214. .addconv
  2215.   If AddLast(convo())            ;add the line to the list
  2216.     convo()\b=addlist$
  2217.     u+1
  2218.   Else
  2219.     FirstItem convo()
  2220.     KillItem convo()
  2221.     LastItem convo()
  2222.     If AddLast(convo())            ;add the line to the list
  2223.       convo()\b=addlist$
  2224.       u+1
  2225.     Else
  2226.       Request "ERROR!","Convo Addition Error!","OK"
  2227.       Goto quit
  2228.     EndIf
  2229.   EndIf
  2230.   GTChangeList 1,14,convo()
  2231.   GTSetHighlight 1,14,Index(convo())
  2232.  Return
  2233.  
  2234. .ircdata
  2235.  
  2236. errn$(0)="300"
  2237. errt$(0)="NONE"
  2238. errd(0)=False
  2239. errn$(1)="302"
  2240. errt$(1)="USERHOST"
  2241. errd(1)=False
  2242. errn$(2)="303"
  2243. errt$(2)="ISON"
  2244. errd(2)=False
  2245. errn$(3)="301"
  2246. errt$(3)="AWAY"
  2247. errd(3)=False
  2248. errn$(4)="305"
  2249. errt$(4)="UNAWAY"
  2250. errd(4)=False
  2251. errn$(5)="306"
  2252. errt$(5)="NOWAWAY"
  2253. errd(5)=False
  2254. errn$(6)="311"
  2255. errt$(6)="WHOISUSER"
  2256. errd(6)=False
  2257. errn$(7)="312"
  2258. errt$(7)="WHOISSERVER"
  2259. errd(7)=False
  2260. errn$(8)="313"
  2261. errt$(8)="WHOISOPERATOR"
  2262. errd(8)=False
  2263. errn$(9)="317"
  2264. errt$(9)="WHOISIDLE"
  2265. errd(9)=False
  2266. errn$(10)="318"
  2267. errt$(10)="ENDOFWHOIS"
  2268. errd(10)=False
  2269. errn$(11)="319"
  2270. errt$(11)="WHOISCHANNELS"
  2271. errd(11)=False
  2272. errn$(12)="314"
  2273. errt$(12)="WHOWASUSER"
  2274. errd(12)=False
  2275. errn$(13)="369"
  2276. errt$(13)="ENDOFWHOWAS"
  2277. errd(13)=False
  2278. errn$(14)="321"
  2279. errt$(14)="LISTSTART"
  2280. errd(14)=False
  2281. errn$(15)="322"
  2282. errt$(15)="LIST"
  2283. errd(15)=False
  2284. errn$(16)="323"
  2285. errt$(16)="LISTEND"
  2286. errd(16)=False
  2287. errn$(17)="324"
  2288. errt$(17)="CHANNELMODEIS"
  2289. errd(17)=False
  2290. errn$(18)="331"
  2291. errt$(18)="NOTOPIC"
  2292. errd(18)=False
  2293. errn$(19)="332"
  2294. errt$(19)="TOPIC"
  2295. errd(19)=True
  2296. errn$(20)="341"
  2297. errt$(20)="INVITING"
  2298. errd(20)=False
  2299. errn$(21)="342"
  2300. errt$(21)="SUMMONING"
  2301. errd(21)=False
  2302. errn$(22)="351"
  2303. errt$(22)="VERSION"
  2304. errd(22)=False
  2305. errn$(23)="352"
  2306. errt$(23)="WHOREPLY"
  2307. errd(23)=False
  2308. errn$(24)="315"
  2309. errt$(24)="ENDOFWHO"
  2310. errd(24)=False
  2311. errn$(25)="353"
  2312. errt$(25)="NAMREPLY"
  2313. errd(25)=True
  2314. errn$(26)="366"
  2315. errt$(26)="ENDOFNAMES"
  2316. errd(26)=False
  2317. errn$(27)="364"
  2318. errt$(27)="LINKS"
  2319. errd(27)=False
  2320. errn$(28)="365"
  2321. errt$(28)="ENDOFLINKS"
  2322. errd(28)=False
  2323. errn$(29)="367"
  2324. errt$(29)="BANLIST"
  2325. errd(29)=False
  2326. errn$(30)="368"
  2327. errt$(30)="ENDOFBANLIST"
  2328. errd(30)=False
  2329. errn$(31)="371"
  2330. errt$(31)="INFO"
  2331. errd(31)=False
  2332. errn$(32)="374"
  2333. errt$(32)="ENDOFINFO"
  2334. errd(32)=False
  2335. errn$(33)="375"
  2336. errt$(33)="MOTDSTART"
  2337. errd(33)=False
  2338. errn$(34)="372"
  2339. errt$(34)="MOTD"
  2340. errd(34)=False
  2341. errn$(35)="376"
  2342. errt$(35)="ENDOFMOTD"
  2343. errd(35)=True
  2344. errn$(36)="381"
  2345. errt$(36)="YOUREOPER"
  2346. errd(36)=False
  2347. errn$(37)="382"
  2348. errt$(37)="REHASHING"
  2349. errd(37)=False
  2350. errn$(38)="391"
  2351. errt$(38)="TIME"
  2352. errd(38)=False
  2353. errn$(39)="392"
  2354. errt$(39)="USERSSTART"
  2355. errd(39)=False
  2356. errn$(40)="393"
  2357. errt$(40)="USERS"
  2358. errd(40)=False
  2359. errn$(41)="394"
  2360. errt$(41)="ENDOFUSERS"
  2361. errd(41)=False
  2362. errn$(42)="395"
  2363. errt$(42)="NOUSERS"
  2364. errd(42)=False
  2365. errn$(43)="200"
  2366. errt$(43)="TRACELINK"
  2367. errd(43)=False
  2368. errn$(44)="201"
  2369. errt$(44)="TRACECONNECTING"
  2370. errd(44)=False
  2371. errn$(45)="202"
  2372. errt$(45)="TRACEHANDSHAKE"
  2373. errd(45)=False
  2374. errn$(46)="203"
  2375. errt$(46)="TRACEUNKNOWN"
  2376. errd(46)=False
  2377. errn$(47)="204"
  2378. errt$(47)="TRACEOPERATOR"
  2379. errd(47)=False
  2380. errn$(48)="205"
  2381. errt$(48)="TRACEUSER"
  2382. errd(48)=False
  2383. errn$(49)="206"
  2384. errt$(49)="TRACESERVER"
  2385. errd(49)=False
  2386. errn$(50)="208"
  2387. errt$(50)="TRACENEWTYPE"
  2388. errd(50)=False
  2389. errn$(51)="261"
  2390. errt$(51)="TRACELOG"
  2391. errd(51)=False
  2392. errn$(52)="211"
  2393. errt$(52)="STATSLINKINFO"
  2394. errd(52)=False
  2395. errn$(53)="212"
  2396. errt$(53)="STATSCOMMANDS"
  2397. errd(53)=False
  2398. errn$(54)="213"
  2399. errt$(54)="STATSCLINE"
  2400. errd(54)=False
  2401. errn$(55)="214"
  2402. errt$(55)="STATSNLINE"
  2403. errd(55)=False
  2404. errn$(56)="215"
  2405. errt$(56)="STATSILINE"
  2406. errd(56)=False
  2407. errn$(57)="216"
  2408. errt$(57)="STATSKLINE"
  2409. errd(57)=False
  2410. errn$(58)="218"
  2411. errt$(58)="STATSYLINE"
  2412. errd(58)=False
  2413. errn$(59)="219"
  2414. errt$(59)="ENDOFSTATS"
  2415. errd(59)=False
  2416. errn$(60)="241"
  2417. errt$(60)="STATSLLINE"
  2418. errd(60)=False
  2419. errn$(61)="242"
  2420. errt$(61)="STATSUPTIME"
  2421. errd(61)=False
  2422. errn$(62)="243"
  2423. errt$(62)="STATSOLINE"
  2424. errd(62)=False
  2425. errn$(63)="244"
  2426. errt$(63)="STATSHLINE"
  2427. errd(63)=False
  2428. errn$(64)="221"
  2429. errt$(64)="UMODEIS"
  2430. errd(64)=False
  2431. errn$(65)="251"
  2432. errt$(65)="LUSERCLIENT"
  2433. errd(65)=False
  2434. errn$(66)="252"
  2435. errt$(66)="LUSEROP"
  2436. errd(66)=False
  2437. errn$(67)="253"
  2438. errt$(67)="LUSERUNKNOWN"
  2439. errd(67)=False
  2440. errn$(68)="254"
  2441. errt$(68)="LUSERCHANNELS"
  2442. errd(68)=False
  2443. errn$(69)="255"
  2444. errt$(69)="LUSERME"
  2445. errd(69)=False
  2446. errn$(70)="256"
  2447. errt$(70)="ADMINME"
  2448. errd(70)=False
  2449. errn$(71)="257"
  2450. errt$(71)="ADMINLOC1"
  2451. errd(71)=False
  2452. errn$(72)="258"
  2453. errt$(72)="ADMINLOC2"
  2454. errd(72)=False
  2455. errn$(73)="259"
  2456. errt$(73)="ADMINEMAIL"
  2457. errd(73)=False
  2458. errn$(74)="209"
  2459. errt$(74)="TRACECLASS"
  2460. errd(74)=False
  2461. errn$(75)="217"
  2462. errt$(75)="STATSQLINE"
  2463. errd(75)=False
  2464. errn$(76)="231"
  2465. errt$(76)="SERVICEINFO"
  2466. errd(76)=False
  2467. errn$(77)="232"
  2468. errt$(77)="ENDOFSERVICES"
  2469. errd(77)=False
  2470. errn$(78)="233"
  2471. errt$(78)="SERVICE"
  2472. errd(78)=False
  2473. errn$(79)="234"
  2474. errt$(79)="SERVLIST"
  2475. errd(79)=False
  2476. errn$(80)="235"
  2477. errt$(80)="SERVLISTEND"
  2478. errd(80)=False
  2479. errn$(81)="316"
  2480. errt$(81)="WHOISCHANOP"
  2481. errd(81)=False
  2482. errn$(82)="361"
  2483. errt$(82)="KILLDONE"
  2484. errd(82)=False
  2485. errn$(83)="362"
  2486. errt$(83)="CLOSING"
  2487. errd(83)=False
  2488. errn$(84)="363"
  2489. errt$(84)="CLOSEEND"
  2490. errd(84)=False
  2491. errn$(85)="373"
  2492. errt$(85)="INFOSTART"
  2493. errd(85)=False
  2494. errn$(86)="384"
  2495. errt$(86)="MYPORTIS"
  2496. errd(86)=False
  2497. errn$(87)="466"
  2498. errt$(87)="YOUWILLBEBANNED"
  2499. errd(87)=False
  2500. errn$(88)="476"
  2501. errt$(88)="BADCHANMASK"
  2502. errd(88)=False
  2503. errn$(89)="492"
  2504. errt$(89)="NOSERVICEHOST"
  2505. errd(89)=False
  2506. errn$(90)="401"
  2507. errt$(90)="NOSUCHNICK"
  2508. errd(90)=True
  2509. errn$(91)="402"
  2510. errt$(91)="NOSUCHSERVER"
  2511. errd(91)=True
  2512. errn$(92)="403"
  2513. errt$(92)="NOSUCHCHANNEL"
  2514. errd(92)=True
  2515. errn$(93)="404"
  2516. errt$(93)="CANNOTSENDTOCHAN"
  2517. errd(93)=False
  2518. errn$(94)="405"
  2519. errt$(94)="TOOMANYCHANNELS"
  2520. errd(94)=False
  2521. errn$(95)="406"
  2522. errt$(95)="WASNOSUCHNICK"
  2523. errd(95)=False
  2524. errn$(96)="407"
  2525. errt$(96)="TOOMANYTARGETS"
  2526. errd(96)=False
  2527. errn$(97)="409"
  2528. errt$(97)="NOORIGIN"
  2529. errd(97)=False
  2530. errn$(98)="411"
  2531. errt$(98)="NORECIPIENT"
  2532. errd(98)=False
  2533. errn$(99)="412"
  2534. errt$(99)="NOTEXTTOSEND"
  2535. errd(99)=False
  2536. errn$(100)="413"
  2537. errt$(100)="NOTOPLEVEL"
  2538. errd(100)=False
  2539. errn$(101)="414"
  2540. errt$(101)="WILDTOPLEVEL"
  2541. errd(101)=False
  2542. errn$(102)="421"
  2543. errt$(102)="UNKNOWNCOMMAND"
  2544. errd(102)=False
  2545. errn$(103)="422"
  2546. errt$(103)="NOMOTD"
  2547. errd(103)=False
  2548. errn$(104)="423"
  2549. errt$(104)="NOADMININFO"
  2550. errd(104)=False
  2551. errn$(105)="424"
  2552. errt$(105)="FILEERROR"
  2553. errd(105)=False
  2554. errn$(106)="431"
  2555. errt$(106)="NONICKNAMEGIVEN"
  2556. errd(106)=False
  2557. errn$(107)="432"
  2558. errt$(107)="ERRONEUSNICKNAME"
  2559. errd(107)=False
  2560. errn$(108)="433"
  2561. errt$(108)="NICKNAMEINUSE"
  2562. errd(108)=True
  2563. errn$(109)="436"
  2564. errt$(109)="NICKCOLLISION"
  2565. errd(109)=False
  2566. errn$(110)="441"
  2567. errt$(110)="USERNOTINCHANNEL"
  2568. errd(110)=False
  2569. errn$(111)="442"
  2570. errt$(111)="NOTONCHANNEL"
  2571. errd(111)=False
  2572. errn$(112)="443"
  2573. errt$(112)="USERONCHANNEL"
  2574. errd(112)=False
  2575. errn$(113)="444"
  2576. errt$(113)="NOLOGIN"
  2577. errd(113)=False
  2578. errn$(114)="445"
  2579. errt$(114)="SUMMONDISABLED"
  2580. errd(114)=False
  2581. errn$(115)="446"
  2582. errt$(115)="USERSDISABLED"
  2583. errd(115)=False
  2584. errn$(116)="451"
  2585. errt$(116)="NOTREGISTERED"
  2586. errd(116)=False
  2587. errn$(117)="461"
  2588. errt$(117)="NEEDMOREPARAMS"
  2589. errd(117)=False
  2590. errn$(118)="462"
  2591. errt$(118)="ALREADYREGISTRED"
  2592. errd(118)=False
  2593. errn$(119)="463"
  2594. errt$(119)="NOPERMFORHOST"
  2595. errd(119)=False
  2596. errn$(120)="464"
  2597. errt$(120)="PASSWDMISMATCH"
  2598. errd(120)=False
  2599. errn$(121)="465"
  2600. errt$(121)="YOUREBANNEDCREEP"
  2601. errd(121)=False
  2602. errn$(122)="467"
  2603. errt$(122)="KEYSET"
  2604. errd(122)=False
  2605. errn$(123)="471"
  2606. errt$(123)="CHANNELISFULL"
  2607. errd(123)=False
  2608. errn$(124)="472"
  2609. errt$(124)="UNKNOWNMODE"
  2610. errd(124)=False
  2611. errn$(125)="473"
  2612. errt$(125)="INVITEONLYCHAN"
  2613. errd(125)=False
  2614. errn$(126)="474"
  2615. errt$(126)="BANNEDFROMCHAN"
  2616. errd(126)=False
  2617. errn$(127)="475"
  2618. errt$(127)="BADCHANNELKEY"
  2619. errd(127)=False
  2620. errn$(128)="481"
  2621. errt$(128)="NOPRIVILEGES"
  2622. errd(128)=False
  2623. errn$(129)="482"
  2624. errt$(129)="CHANOPRIVSNEEDED"
  2625. errd(129)=False
  2626. errn$(130)="483"
  2627. errt$(130)="CANTKILLSERVER"
  2628. errd(130)=False
  2629. errn$(131)="491"
  2630. errt$(131)="NOOPERHOST"
  2631. errd(131)=False
  2632. errn$(132)="501"
  2633. errt$(132)="UMODEUNKNOWNFLAG"
  2634. errd(132)=False
  2635. errn$(133)="502"
  2636. errt$(133)="USERSDONTMATCH"
  2637. errd(133)=False
  2638. .colordata
  2639. irccol$(0)=".white."
  2640. irccol$(1)=".black."
  2641. irccol$(2)=".drkbl."
  2642. irccol$(3)=".green."
  2643. irccol$(4)=".Red."
  2644. irccol$(5)=".brown."
  2645. irccol$(6)=".purpl."
  2646. irccol$(7)=".orang."
  2647. irccol$(8)=".yelow."
  2648. irccol$(9)=".liGrn."
  2649. irccol$(10)=".dkGrn."
  2650. irccol$(11)=".cyan."
  2651. irccol$(12)=".Blue."
  2652. irccol$(13)=".mgnta."
  2653. irccol$(14)=".dkgry."
  2654. irccol$(15)=".ltgry."
  2655. Return
  2656.  
  2657.  
  2658.  
  2659.  
  2660. .unreg
  2661.   Request "UnRegistered!","This is an|Unregistered|Version!","I KNOW!"
  2662.   Delay_(100)
  2663. Return
  2664.  
  2665. ;------------------------------------
  2666. ;
  2667. ; EliZa Routine
  2668. ;
  2669. ;------------------------------------
  2670.  
  2671. .ereply
  2672.   Dim C$(72),I$(72),K$(72),F$(72),S$(72),R$(72),P$(72),Z$(72)
  2673.   a$=said$
  2674. ;If init=False
  2675. ;  init=True
  2676. ;EndIf
  2677.   a$=" "+a$+" "
  2678.   I$=UCase$(a$)
  2679.   ;   Get RID OF APOSTROPHES
  2680.   ;Use Window 0
  2681.   ret=False
  2682.   Gosub echeck
  2683.   If ret=True
  2684.    Return
  2685.   EndIf
  2686.   ;   -FIND KEYWORD IN I$-
  2687.   Restore KEYWORDS
  2688.   S=0
  2689.   For K=1 To NA
  2690.     Read K$
  2691.     If S>0 Then Goto keyword
  2692.       For L=1 To Len(I$)-Len(K$)+1
  2693.         If Mid$(I$,L,Len(K$))=K$
  2694.           S=K
  2695.           T=L
  2696.           F$=K$
  2697.         EndIf
  2698.       Next L
  2699.     .keyword
  2700.   Next K
  2701.   ;Use Window 0
  2702.   If S>0
  2703.     K=S
  2704.     L=T
  2705.     Goto conjugate
  2706.   EndIf
  2707.   K=36
  2708.   Goto reply
  2709.   ;WE DIDN'T FIND ANY KEYWORDS
  2710.   .conjugate
  2711.   ;TAKE RIGHT PART OF STRING AND CONJUGATE IT
  2712.   ;USING THE List OF STRINGS To BE SWAPPED
  2713.   Restore
  2714.   For X=1 To NA
  2715.     Read Z$
  2716.   Next X
  2717.   ;REM SKIP OVER KEYWORDS
  2718.   C$=" "+Right$(I$,Len(I$)-Len(F$)-L+1)
  2719.   For X=1 To N2/2
  2720.     Read S$,R$
  2721.     For L=1 To Len(C$)
  2722.       If L+Len(S$)>Len(C$)
  2723.       Else
  2724.         If Mid$(C$,L,Len(S$))<>S$
  2725.         Else
  2726.           C$=Left$(C$,L-1)+R$+Right$(C$,Len(C$)-L-Len(S$)+1)
  2727.           L=L+Len(R$)
  2728.           Goto skip
  2729.         EndIf
  2730.       EndIf
  2731.       If L+Len(R$)>Len(C$)
  2732.       Else
  2733.         If Mid$(C$,L,Len(R$))<>R$
  2734.         Else
  2735.           C$=Left$(C$,L-1)+S$+Right$(C$,Len(C$)-L-Len(R$)+1)
  2736.           L=L+Len(S$)
  2737.         EndIf
  2738.       EndIf
  2739.       .skip
  2740.     Next L
  2741.   Next X
  2742.   If Mid$(C$,2,1)=" " Then C$=Right$(C$,Len(C$)-1)
  2743.   ;REM ONLY ONE SPACE
  2744.   .reply  ;NOW USING THE KEYWORD NUMBER (K) Get REPLY
  2745.   Restore
  2746.   For X=1 To NA+NB
  2747.     Read Z$
  2748.   Next X
  2749.   For X=1 To R(K)
  2750.     Read F$
  2751.   Next X
  2752.   ; Read RIGHT REPLY
  2753.   ;Use Window 0
  2754.   R(K)=R(K)+1
  2755.   If R(K)>N(K)
  2756.    R(K)=S(K)
  2757.   EndIf
  2758.   If Right$(F$,1)<>"*"
  2759.     Zx$=F$
  2760.     y$=who$+", "+Zx$
  2761.     say{y$}
  2762.     P$=I$
  2763.     Return
  2764.   EndIf
  2765.   Yx$=Left$(F$,Len(F$)-1)+C$
  2766.   Zx$=who$+", "+Yx$
  2767.   say{Zx$}
  2768.   ;Use Window 0
  2769.   P$=I$
  2770.   Return
  2771.  
  2772.   ; -PROGRAM Data FOLLOWS-
  2773.   KEYWORDS:
  2774.     Data$ "CAN YOU","CAN I","YOU ARE","YOURE","I DONT","I FEEL"
  2775.     Data$ "WHY DONT YOU","WHY CANT I","ARE YOU","I CANT","I AM","IM "
  2776.     Data$ "YOU ","I WANT","WHAT","HOW","WHO","WHERE","WHEN","WHY"
  2777.     Data$ "NAME","CAUSE","SORRY","DREAM","HELLO","HI ","MAYBE"
  2778.     Data$ " NO","YOUR","ALWAYS","THINK","ALIKE","YES","FRIEND"
  2779.     Data$ "COMPUTER","NOKEYFOUND"
  2780.   ;STRING Data For CONJUGATIONS
  2781.   STRINGS:
  2782.     Data$ " ARE "," AM ","WERE ","WAS "," YOU "," I ","YOUR ","MY "
  2783.     Data$ " IVE "," YOUVE "," IM "," YOURE "
  2784.   REPLIES:
  2785.     Data$ "DON'T YOU BELIEVE THAT I CAN*"
  2786.     Data$ "PERHAPS YOU WOULD LIKE TO BE ABLE TO*"
  2787.     Data$ "YOU WANT ME TO BE ABLE TO*"
  2788.     Data$ "PERHAPS YOU DON'T WANT TO*"
  2789.     Data$ "DO YOU WANT TO BE ABLE TO*"
  2790.     Data$ "WHAT MAKES YOU THINK I AM*"
  2791.     Data$ "DOES IT PLEASE YOU To BELIEVE I AM*"
  2792.     Data$ "PERHAPS YOU WOULD LIKE TO BE*"
  2793.     Data$ "DO YOU SOMETIMES WISH YOU WERE*"
  2794.     Data$ "DON'T YOU REALLY*"
  2795.     Data$ "WHY DON'T YOU*"
  2796.     Data$ "DO YOU WISH TO BE ABLE TO*"
  2797.     Data$ "DOES THAT TROUBLE YOU?"
  2798.     Data$ "TELL ME MORE ABOUT SUCH FEELINGS."
  2799.     Data$ "DO YOU OFTEN FEEL*"
  2800.     Data$ "DO YOU ENJOY FEELING*"
  2801.     Data$ "DO YOU REALLY BELIEVE I DON'T*"
  2802.     Data$ "PERHAPS IN GOOD TIME I WILL*"
  2803.     Data$ "DO YOU WANT ME TO*"
  2804.     Data$ "DO YOU THINK YOU SHOULD BE ABLE TO*"
  2805.     Data$ "WHY CAN'T YOU*"
  2806.     Data$ "WHY ARE YOU INTERESTED IN WHETHER OR NOT I AM*"
  2807.     Data$ "WOULD YOU PREFER IF I WERE NOT*"
  2808.     Data$ "PERHAPS IN YOUR FANTASIES I AM*"
  2809.     Data$ "HOW DO YOU KNOW YOU CAN'T*"
  2810.     Data$ "HAVE YOU TRIED?"
  2811.     Data$ "PERHAPS YOU CAN NOW*"
  2812.     Data$ "DID YOU COME TO ME BECAUSE YOU ARE*"
  2813.     Data$ "HOW LONG HAVE YOU BEEN*"
  2814.     Data$ "DO YOU BELIEVE IT IS NORMAL TO BE*"
  2815.     Data$ "DO YOU ENJOY BEING*"
  2816.     Data$ "WE WERE DISCUSSING YOU-- NOT ME."
  2817.     Data$ "OH, I*"
  2818.     Data$ "YOU'RE NOT REALLY TALKING ABOUT ME, ARE YOU?"
  2819.     Data$ "WHAT WOULD IT MEAN TO YOU IF YOU GOT*"
  2820.     Data$ "WHY DO YOU WANT*"
  2821.     Data$ "SUPPOSE YOU SOON GOT*"
  2822.     Data$ "WHAT IF YOU NEVER GOT*"
  2823.     Data$ "I SOMETIMES ALSO WANT*"
  2824.     Data$ "WHY DO YOU ASK?"
  2825.     Data$ "DOES THAT QUESTION INTEREST YOU?"
  2826.     Data$ "WHAT ANSWER WOULD PLEASE YOU THE MOST?"
  2827.     Data$ "WHAT DO YOU THINK?"
  2828.     Data$ "ARE SUCH QUESTIONS ON YOUR MIND OFTEN?"
  2829.     Data$ "WHAT IS IT THAT YOU REALLY WANT TO KNOW?"
  2830.     Data$ "HAVE YOU ASKED ANYONE ELSE?"
  2831.     Data$ "HAVE YOU ASKED SUCH QUESTIONS BEFORE?"
  2832.     Data$ "WHAT ELSE COME TO MIND WHEN YOU ASK THAT?"
  2833.     Data$ "NAMES DON'T INTEREST ME."
  2834.     Data$ "I DON'T CARE ABOUT NAMES-- PLEASE GO ON."
  2835.     Data$ "IS THAT THE REAL REASON?"
  2836.     Data$ "DON'T ANY OTHER REASONS COME TO MIND?"
  2837.     Data$ "DOES THAT REASON EXPLAIN ANYTHING ELSE?"
  2838.     Data$ "WHAT OTHER REASONS MIGHT THERE BE?"
  2839.     Data$ "PLEASE DON'T APOLOGIZE!"
  2840.     Data$ "APOLOGIES ARE NOT NECESSARY."
  2841.     Data$ "WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE."
  2842.     Data$ "DON'T BE SO DEFENSIVE!"
  2843.     Data$ "WHAT DOES THAT DREAM SUGGEST TO YOU?"
  2844.     Data$ "DO YOU DREAM OFTEN?"
  2845.     Data$ "WHAT PERSONS APPEAR IN YOUR DREAMS?"
  2846.     Data$ "ARE YOU DISTURBED BY YOUR DREAMS?"
  2847.     Data$ "HOW DO YOU DO ... PLEASE STATE YOUR PROBLEM."
  2848.     Data$ "YOU DON'T SEEM QUITE CERTAIN."
  2849.     Data$ "WHY THE UNCERTAIN TONE?"
  2850.     Data$ "CAN'T YOU BE MORE POSITIVE?"
  2851.     Data$ "YOU AREN'T SURE?"
  2852.     Data$ "DON'T YOU KNOW?"
  2853.     Data$ "ARE YOU SAYING NO JUST TO BE NEGATIVE?"
  2854.     Data$ "YOU ARE BEING A BIT NEGATIVE."
  2855.     Data$ "WHY NOT?"
  2856.     Data$ "ARE YOU SURE?"
  2857.     Data$ "WHY NO?"
  2858.     Data$ "WHY ARE YOU CONCERNED ABOUT MY*"
  2859.     Data$ "WHAT ABOUT YOUR OWN*"
  2860.     Data$ "CAN YOU THINK OF A SPECIFIC EXAMPLE?"
  2861.     Data$ "WHEN?"
  2862.     Data$ "WHAT ARE YOU THINKING OF?"
  2863.     Data$ "REALLY, ALWAYS?"
  2864.     Data$ "DO YOU REALLY THINK SO?"
  2865.     Data$ "BUT YOU ARE NOT SURE YOU*"
  2866.     Data$ "DO YOU DOUBT YOU*"
  2867.     Data$ "IN WHAT WAY?"
  2868.     Data$ "WHAT RESEMBLANCE DO YOU SEE?"
  2869.     Data$ "WHAT DOES THE SIMILARITY SUGGEST TO YOU?"
  2870.     Data$ "WHAT OTHER CONNECTIONS DO YOU SEE?"
  2871.     Data$ "COULD THERE REALLY BE SOME CONNECTION?"
  2872.     Data$ "HOW?"
  2873.     Data$ "YOU SEEM QUITE POSITIVE."
  2874.     Data$ "ARE YOU SURE?"
  2875.     Data$ "I SEE."
  2876.     Data$ "I UNDERSTAND."
  2877.     Data$ "WHY DO YOU BRING UP THE TOPIC OF FRIENDS?"
  2878.     Data$ "DO YOUR FRIENDS WORRY YOU?"
  2879.     Data$ "DO YOUR FRIENDS PICK ON YOU?"
  2880.     Data$ "ARE YOU SURE YOU HAVE ANY FRIENDS?"
  2881.     Data$ "DO YOU IMPOSE ON YOUR FRIENDS?"
  2882.     Data$ "PERHAPS YOUR LOVE FOR FRIENDS WORRIES YOU."
  2883.     Data$ "DO COMPUTERS WORRY YOU?"
  2884.     Data$ "ARE YOU TALKING ABOUT ME IN PARTICULAR?"
  2885.     Data$ "ARE YOU FRIGHTENED BY MACHINES?"
  2886.     Data$ "WHY DO YOU MENTION COMPUTERS?"
  2887.     Data$ "WHAT DO YOU THINK MACHINES HAVE TO DO WITH YOUR PROBLEM?"
  2888.     Data$ "DON'T YOU THINK COMPUTERS CAN HELP PEOPLE?"
  2889.     Data$ "WHAT IS IT ABOUT MACHINES THAT WORRIES YOU?"
  2890.     Data$ "SAY, DO YOU HAVE ANY PSYCHOLOGICAL PROBLEMS?"
  2891.     Data$ "WHAT DOES THAT SUGGEST TO YOU?"
  2892.     Data$ "I SEE."
  2893.     Data$ "I'M NOT SURE I UNDERSTAND YOU FULLY."
  2894.     Data$ "COME COME ELUCIDATE YOUR THOUGHTS."
  2895.     Data$ "CAN YOU ELABORATE ON THAT?"
  2896.     Data$ "THAT IS QUITE INTERESTING"
  2897.   ;Data For FINDING REPLIES
  2898.   NUMREPLIES:
  2899.     Data.l 1,3,4,2,6,4,6,4,10,4,14,3,17,3,20,2,22,3,25,3
  2900.     Data.l 28,4,28,4,32,3,35,5,40,9,40,9,40,9,40,9,40,9,40,9
  2901.     Data.l 49,2,51,4,55,4,59,4,63,1,63,1,64,5,69,5,74,2,76,4
  2902.     Data.l 80,3,83,7,90,3,93,6,99,7,106,6
  2903.  
  2904. Return
  2905.  
  2906. .echeck
  2907.   For L=1 To Len(I$)
  2908. ;    .aposone
  2909. ;    If Mid$(I$,L,1)="'"
  2910. ;      I$=Left$(I$,L-1)+Right$(I$,Len(I$)-L)
  2911. ;      Goto aposone
  2912. ;    EndIf
  2913.     If L+4<=Len(I$)
  2914.       If Mid$(I$,L,4)="SHUT"
  2915.         Zx$="Hey, "+who$+", SHUT UP.. "
  2916.         say{Zx$}
  2917.         ret=True
  2918.       EndIf
  2919.     EndIf
  2920.   Next L
  2921.   If I$=P$
  2922.     Zx$=who$+" Please, Don't Repeat Yourself!"
  2923.     say{Zx$}
  2924.     ret=True
  2925.   EndIf
  2926.  
  2927. Return
  2928.  
  2929.  
  2930. .logita
  2931. logtext{ltext$}
  2932. logtext{input$}
  2933. Return
  2934.  
  2935. .logitb
  2936. logtext{otext$}
  2937. logtext{output$}
  2938. Return
  2939.  
  2940. .getmax
  2941. maxchars=TextFit_(RastPort(1),&output$,chars,&al,0,1,464,fsize)
  2942. Return
  2943.  
  2944. End
  2945.  
  2946. .quit
  2947.   If bot=True
  2948.     say{"I've got to go :("}    ; Send goodbye messages
  2949.     say{"Bye!"}
  2950.   EndIf
  2951.   logtext{"--- End Session ---"}
  2952.   CloseFile 2
  2953.   End
  2954. Return
  2955.  
  2956. .nick
  2957.   output{"NICK "+nick$}                       ; send nick to server
  2958.   nlen=Len(nick$)
  2959.   GTSetString 1,4,nick$
  2960. Return
  2961.  
  2962.  
  2963. .chansort
  2964. i=0
  2965. done=False
  2966.     If FirstItem(conchan())=False
  2967.        If AddItem(conchan())
  2968.          conchan()\s=chans$
  2969.        EndIf
  2970.        done=True
  2971.      Else
  2972.        If conchan()\s=chans$
  2973.          KillItem conchan()
  2974.          done=True
  2975.        EndIf
  2976.        Repeat
  2977.          If NextItem(conchan())=True
  2978.            If conchan()\s=chans$
  2979.              KillItem conchan()
  2980.              done=True
  2981.            EndIf
  2982.          Else
  2983.            If AddLast(conchan())
  2984.              conchan()\s=chans$
  2985.            EndIf
  2986.            done=True
  2987.          EndIf
  2988.          If i=200
  2989.            done=True
  2990.            GTSetString 0,18,"Too Many!"
  2991.          Else
  2992.            i+1
  2993.          EndIf
  2994.        Until done=True
  2995.      EndIf
  2996.   GTChangeList evw,17,conchan()
  2997. ;  SetBPen_(RastPort(1),4)
  2998.  
  2999. Return
  3000.  
  3001. .priv
  3002.    ;
  3003.    ; Send text direct to person
  3004.    ;
  3005. ;   SHARED chan$,target$,who$
  3006.    say$="privmsg "+whoto$+" :"+awayto$
  3007.    NPrintTCP{say$}
  3008.    logtext{"<me>"+say$}
  3009. Return
  3010.  
  3011. .disksave
  3012.  Gosub basesave
  3013.  Gosub extendsave
  3014. Return
  3015.  
  3016. .diskload
  3017.  Gosub baseload
  3018.  Gosub extendload
  3019. Return
  3020.  
  3021. .docmd
  3022.   cli$="con:0/0/"+Str$(WBWidth)+"/"+Str$(WBHeight)+"/OrionDOS"
  3023.   If WriteFile(0,cli$)
  3024.     WBenchToFront_
  3025.     Execute_ &cmd$,Peek.l(Addr File(0)),0
  3026.     WBenchToBack_
  3027.     CloseFile 0
  3028.   EndIf
  3029. Return
  3030.  
  3031. .test
  3032.  
  3033. If test=True
  3034.   For i=0 To nickstot
  3035.   NPrint nickset$(i)
  3036.   Next i
  3037. EndIf
  3038.  
  3039. ;-----------------------------------------------------------
  3040.  
  3041. ; Standard Blitz TCP Functions V1.8 by Paul Burkey (c)1997-1998
  3042. ; Compiled with help from Ercole Spiteri and Anton Reinauer
  3043. ; You *must* have the bsdsocket.library setup in BlitZ!!
  3044. ; Contact me at burkey@bigfoot.com
  3045. ;-----------------------------------------------------------
  3046. ;History
  3047. ;-------
  3048. ;<16.2.97> Version 1.8
  3049. ;Added NLPrintTCP{} for easy send string with carrage return and newline.
  3050. ;Removed need for 3rd Party libs (only bsdsocket.library needed)
  3051. ;
  3052. ;<24.12.97> Version 1.7
  3053. ;ReadTCP{} Updated with extra safety and Speed
  3054. ;
  3055. ;<18.9.97> Version 1.6
  3056. ;Added PrintTCP{}  for an easy "send string" command.
  3057. ;Added NPrintTCP{} for easy send string with carrage return
  3058. ;CheckTCP{} merged into the ConnectTCP{} function.
  3059. ;
  3060. ;---------------
  3061. ; Function List
  3062. ;---------------
  3063. ;
  3064. ;ReadTCP{}                       ; Similar to Edit$() - recives data via TCP connection
  3065. ;ReadMemTCP{ReadAdd.l,MaxSiZe.l} ; Similar to ReamMem - recives data via TCP connection
  3066. ;WriteTCP{ad.l,siZe.w}           ; Similar to WriteMem - sends data via TCP connection
  3067. ;ConnectTCP{host$,port.w}        ; Connect to a remote machine (Full error checking)
  3068. ;PrintTCP{text$}                 ; Similar to Print - sends data via TCP connection
  3069. ;NPrintTCP{text$}                ; Similar to NPrint - sends data via TCP connection
  3070. ;NLPrintTCP{text$}               ; Similar to Print+CR+LF - sends data via TCP connection
  3071. ;CloseTCP{}                      ; Closes TCP Connection
  3072.  
  3073.